|
|
|
Плагины на C++, Пример плагина, обсуждение. |
|
|
DarkMaster |
6.11.2013, 8:57
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27723
Пользователь №: 11.279
|
Образец плагина на C++: Файл .cpp 0.1.1
Подправлен тип указателя в параметрах функций плагина. Код #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 ); }
// Образец функции, возвращающей строку. extern "C" __declspec(dllexport) void __stdcall Function2(tParamStruct *ParamStruct) { strcpy_s(ParamStruct->Result, "Simple emty function"); }
extern "C" __declspec(dllexport) void __stdcall DonePlugin() { delete[] InitStruct.FunctionNames; }
Файл .def
Код LIBRARY EXPORTS InitPlugin DonePlugin Function1 Function2 Архив. Файл .cpp 0.1
Код #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) // 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); }
// Образец функции, возвращающей строку. extern "C" __declspec(dllexport) void __stdcall Function2(void *AdressPS) { ParamStruct = static_cast<tParamStruct *>(AdressPS); strcpy_s(ParamStruct->Result, "Simple emty function"); }
extern "C" __declspec(dllexport) void __stdcall DonePlugin() { delete[] InitStruct.FunctionNames; }
Сообщение отредактировал DarkMaster - 28.5.2015, 1:06
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
29.5.2015, 14:07
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27723
Пользователь №: 11.279
|
Ты не поверишь... Сидим мы, значит, с кнайтом в аське... Цитата Кнайт: я тут добавил пример плагина на с++ в пилот. Авторство писать? Я: ну напиши и ссылку на форум прилепи. Кнайт: ссылку давай. Я: "ссылка на тему плагинов, где был пример". Кнайт: А на сам пример ссылку сделать? На пост всмыcле. Я: можно, вдруг что-то изменится. "ссылка". Хотя погодь, не будем бардак устраивать. *пользуясь могуществом Супермодератора я выношу посты в отдельную тему. Я: держи ссыль, теперь кошерно. Примерно так (IMG: style_emoticons/default/smile.gif) Сообщение отредактировал DarkMaster - 29.5.2015, 14:08
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
29.5.2015, 19:46
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27723
Пользователь №: 11.279
|
Как только будут допилены перекрытые окна. Причина некоторых проблем на данный момент не найдена, сколько искать знать не возможно. Цитата и да, что кнайт думает( или нет) по поводу ограничения в 32 кб на выходе пилота? Есть идеи, или плагины так и будут урезаными что-ли...? Зарезервированные 4 байта будут использованы, как указатель на дополнительную структуру. В ней будет содержаться пользовательский массив любой длинны, размер этого массива, флаг, что надо забирать результат именно из этой структуры, так же будет зарезервировано 2 переменных по 4 байта и 2 по 8 байт. Старый способ передачи убран НЕ будет для совместимости. Сообщение отредактировал DarkMaster - 29.5.2015, 19:46
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
rinat84 |
26.3.2019, 17:16
|
Registred
Сообщений: 9
Регистрация: 3.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.664
|
Цитата(DarkMaster @ 6.11.2013, 10:57) Код InitStruct.FunctionCount = 0; // Выгурзить длл.
(IMG: style_emoticons/default/biggrin.gif) кого еще смущает слово "Выгурзить" ?
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|