Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Плагины на C++, Пример плагина, обсуждение.
DarkMaster
сообщение 6.11.2013, 8:57
Сообщение #1


***********

Модератор 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____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 28.5.2015, 1:07
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27723
Пользователь №: 11.279



Файл .cpp 0.1.1
Подправлен тип указателя в параметрах функций плагина.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 29.5.2015, 13:47
Сообщение #3


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21062
Пользователь №: 16.156



с чего бы тема?)





может кнайт засунет пример в сам пилот?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.5.2015, 14:07
Сообщение #4


***********

Модератор 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____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 29.5.2015, 19:06
Сообщение #5


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21062
Пользователь №: 16.156



кстати, нескромный вопрос, когда примерно релиз, если не военная тайна конечно?....
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 29.5.2015, 19:24
Сообщение #6


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21062
Пользователь №: 16.156



и да, что кнайт думает( или нет) по поводу ограничения в 32 кб на выходе пилота? Есть идеи, или плагины так и будут урезаными что-ли...?






возможно не прав, но не легче передавать не массив чаров, а указатель на него? как я понимаю, сейчас система основана на копировании памяти из длл в память пилота?а при подходе с указателем, не нежно ничего копировать, просто по ссылочке дергать.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.5.2015, 19:46
Сообщение #7


***********

Модератор 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____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
rinat84
сообщение 26.3.2019, 17:16
Сообщение #8


*

Registred
Сообщений: 9
Регистрация: 3.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.664



Цитата(DarkMaster @ 6.11.2013, 10:57) *

Код

        InitStruct.FunctionCount = 0; // Выгурзить длл.



(IMG:style_emoticons/default/biggrin.gif) кого еще смущает слово "Выгурзить" ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 26.3.2019, 18:17
Сообщение #9


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



Цитата(rinat84 @ 26.3.2019, 17:16) *

(IMG:style_emoticons/default/biggrin.gif) кого еще смущает слово "Выгурзить" ?

Это же комментарий...опечатывался человек ничего страшного, зачем этому столько уделять внимания?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.3.2019, 13:10
Сообщение #10


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27723
Пользователь №: 11.279



В более свежей версии более корректная формулировка. Цитата из архивной версии.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 25.4.2024, 22:22
Designed by Nickostyle