Подправлен тип указателя в параметрах функций плагина.
Код
#include <stdexcept>
using namespace std;
struct tInitStruct { long unsigned FunctionCount; const char** FunctionNames; };
struct tParamStruct { int unsigned* WindowHandle; // Handle of workWindow int unsigned* WindowPID; // pid of process of workWindow int unsigned Reserved; char* ParamString; // string of parameters with substituted variables char* ParamStringOrig; // original string of parameters char Result[32767]; // array for returned values };
tParamStruct *ParamStruct; // init by UOPilot static tInitStruct InitStruct; // init by plagin, free on unload
extern "C" __declspec(dllexport) unsigned long * __stdcall InitPlugin(int App, int Scr, double& Version) { // Количество полезных экспортируемых функций для сообщения пилоту // в зависимости от версии протокола обмена между пилотом и плагином. // Это НЕ версия самого пилота, а версия протокола обмена между пилотом и длл. if (Version >= 2.18) { InitStruct.FunctionCount = 2; InitStruct.FunctionNames = new const char*[InitStruct.FunctionCount]; InitStruct.FunctionNames[0] = "Function1"; InitStruct.FunctionNames[1] = "Function2"; } else { InitStruct.FunctionCount = 0; // Выгурзит длл, т.к. функций для экспорта нет. } return (&InitStruct.FunctionCount); }
// Образец функции используемой в пилоте. Вернет значения переданные пилотом // при иницализации dll и доступные для для дальнейших действий. extern "C" __declspec(dllexport) void __stdcall Function1(tParamStruct *ParamStruct) { sprintf_s(ParamStruct->Result, "%s" "%d" "%s" "%d" "%s" "%s" "%s" "%s", "Handle ", ParamStruct->WindowHandle, "; Pid ", ParamStruct->WindowPID, "; Parametr string ", ParamStruct->ParamString, "; Parametr string original ", ParamStruct->ParamStringOrig ); }
struct tInitStruct { long unsigned FunctionCount; const char** FunctionNames; };
struct tParamStruct { int unsigned* WindowHandle; // Handle of workWindow int unsigned* WindowPID; // pid of process of workWindow int unsigned Reserved; char* ParamString; // string of parameters with substituted variables char* ParamStringOrig; // original string of parameters char Result[32767]; // array for returned values };
tParamStruct *ParamStruct; // init by UOPilot static tInitStruct InitStruct; // init by plagin, free on unload
extern "C" __declspec(dllexport) unsigned long * __stdcall InitPlugin(int App, int Scr, double& Version) // App: Application.Handle of UOPilot // Scr: reserved { // Количество полезных экспортируемых функций для сообщения пилоту // в зависимости от версии протокола обмена между пилотом и плагином. // Это НЕ версия самого пилота, а версия протокола обмена между пилотом и длл. if (Version >= 2.18) { InitStruct.FunctionCount = 2; InitStruct.FunctionNames = new const char*[InitStruct.FunctionCount]; InitStruct.FunctionNames[0] = "Function1"; InitStruct.FunctionNames[1] = "Function2"; } else { InitStruct.FunctionCount = 0; // Выгурзить длл. } return (&InitStruct.FunctionCount); }
// Образец функции используемой в пилоте. Вернет значения переданные пилотом // при иницализации dll и доступные для для дальнейших действий. extern "C" __declspec(dllexport) bool __stdcall Function1(void *AdressPS) { ParamStruct = static_cast<tParamStruct *>(AdressPS); sprintf_s(ParamStruct->Result, "%s" "%d" "%s" "%d" "%s" "%s" "%s" "%s", "Handle ", ParamStruct->WindowHandle, "; Pid ", ParamStruct->WindowPID, "; Parametr string ", ParamStruct->ParamString, "; Parametr string original ", ParamStruct->ParamStringOrig ); return (1); }