|
Plugins |
|
|
WKnight |
15.7.2011, 11:40
|
       
Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006 Группа: Пользователи Наличность: 0
Пользователь №: 4.688

|
Подумал на досуге над возможностью использования плагинов, вот что получилось, это типа шаблон-пример. code
Код library Plugin;
uses Forms; // Формс нужен для TApplication, если не используете, можно убрать и его.
type
// обмен строковыми данными происходит через структуру, для совместимости с С++
tInitStruct = packed record FunctionName : Pchar; end;
tParamStruct = packed record pWindowHandle : Cardinal; pInt1 : Integer; pInt2 : Integer; pInt3 : Integer; pString1 : Pchar; pString2 : Pchar; end;
var DA : TApplication; DS : TScreen; tPS: ^tParamStruct; tIS: ^tInitStruct;
// список полезных экспортируемых функций, для сообщения пилоту const FunctionNameList: array [0..1] of Pchar = ('Function1','Function2');
function InitPlugin(App, Scr: integer; Ver: Real; Var FunctionCount:
integer):boolean; stdcall; begin Result := false; // запомним родные значения, чтоб при выгрузке восстановить DS := Screen; DA := Application; // присвоим значения пилота if Scr <> 0 then Screen := TScreen(Scr); if App <> 0 then Application := TApplication(App); // проверяем версию пилота, если нужно. // пилот анализирует возвращаемое значение и выгружает dll, если false if Ver >= 2.18 then Result := true; FunctionCount := 2; // количество полезных экспортируемых функций, для использования в скриптах end;
procedure DonePlugin; stdcall; begin // восстанавливаем родные значения Screen := DS; Application := DA; end;
procedure InfoPlugin(AdressIS: Pointer; Index :cardinal); stdcall; begin // сообщаем пилоту по запросу имя функции. количество экспортируемых передано ранее tIS:=AdressIS; tIS^.FunctionName:= FunctionNameList[Index]; end;
function Function1(AdressPS: Pointer): boolean; stdcall; begin // единственным параметром передается указатель на структуру, через которую происходит обмен данными tPS:=AdressPS; if tPS^.pWindowHandle <> 0 then tPS^.pString1 := 'Ok' else tPS^.pString1 := 'eggog'; Result := true; // результат анализируется на предмет успешности завершения функции end;
function Function2(Adress: Pointer): boolean; stdcall; begin // Result := true; end;
// Одной из функций крайне желательно делать подсказку по плагину, // если собираетесь его распространять, да и даже если не собираетесь, // чтоб потом через несколько лет себе же напомнить что оно делает. // Например вывод простой формочки с текстом.
Exports InitPlugin, DonePlugin, InfoPlugin, Function1, Function2;
begin end.
Сообщение отредактировал DarkMaster - 23.10.2013, 23:25
|
|
|
|
|
  |
Сообщений в этой теме
WKnight Plugins 15.7.2011, 11:40 Zeleax И шо с этим делать? :) 15.7.2011, 14:13 WKnight Ето примерный образец плагина, который в скором вр... 15.7.2011, 14:31 Zeleax Понятно. Жаль сюда C# легко не прикрутишь, думаю (... 15.7.2011, 17:28 DarkMaster findcolor бы докрутить - пилот бы вышел на новый э... 15.7.2011, 18:24 WKnight Что мешает? Я си не знаю, но по совету именно для ... 16.7.2011, 7:32 WKnight тут бы поточнее немного. найденые координаты всегд... 16.7.2011, 15:19 Zeleax в Полезных советах этот баг подробно расписан (даж... 16.7.2011, 15:55 DarkMaster Так же необходимо сделать диапазоны, и очень желат... 16.7.2011, 17:27 Zeleax
Так же необходимо сделать диапазоны, и очень жела... 17.7.2011, 9:32 WKnight меня больше интересовали параметры финдколора, а т... 16.7.2011, 17:31 WKnight Записал, в этой версии делать не стал, мало ли, оп... 17.7.2011, 10:03 DarkMaster Допили, пожалуйста, этот аспект. Это действительно... 17.7.2011, 10:14 Zeleax Мысли на тему плагинов:
1) при подключении плагин... 30.7.2011, 8:09 WKnight Вобщем что мы имеем в настоящий момент.
почитал ме... 10.8.2011, 11:10 Zeleax Встроено в версию 2.20 ?
Какие требования к наиме... 10.8.2011, 12:53 DarkMaster
Может сразу сделать поддержку возврата сразу неск... 10.8.2011, 13:47 Zeleax
Может сразу сделать поддержку возврата сразу неск... 10.8.2011, 14:16 DarkMaster Средствами пилота? Сколько работал с текстом в пил... 10.8.2011, 14:32 Zeleax
Средствами пилота? Сколько работал с текстом в пи... 10.8.2011, 15:11 WKnight нет, следующуюразмещение в Plugins\*.dll
адек... 10.8.2011, 16:15 DarkMaster
Очень рад. В идеале сохранить оба способа, чтобы ... 10.8.2011, 16:23 Zeleax 1) Лучше сразу все результаты писать в указанный м... 10.8.2011, 16:40 Zeleax
1. будет как в промпте, т.е. строке просто присва... 10.8.2011, 16:54 WKnight ждите :D 12.8.2011, 10:14 Zeleax WKnight
Так поддержка плагинов уже функционирует н... 29.8.2011, 23:43 WKnight она изначально нормально функционирует, просто был... 30.8.2011, 11:36 Zeleax Пожелание по плагинам записал в тему ToDo 18.9.2011, 11:31 Zeleax
Печально. Не надо так делать.
Кнайт... GetLastErr... 18.9.2011, 21:07 WKnight
значит что ничего не загрузилось :) 19.9.2011, 11:30 WKnight после непродолжительного анализа обнаружилось... т... 19.9.2011, 11:49 Zeleax
после непродолжительного анализа обнаружилось... ... 19.9.2011, 14:30 WKnight теоретически не обязательно, если плагин в каждой ... 19.9.2011, 15:00 Zeleax
я в си не силен, особенно в упомянутом, но ты уве... 19.9.2011, 21:23  Warstone
не уверен. dll раньше не писал
Выкинь .Net, он не... 20.9.2011, 0:18 Zeleax Да проще забить на C# плагины, тем более, что боле... 20.9.2011, 7:19 zavas А есть реальный пример какого-либо рабочего сишног... 25.10.2013, 8:12
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|