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

> Plugins
WKnight
сообщение 15.7.2011, 11:40
Сообщение #1


********

Разработчик 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
WKnight
сообщение 10.8.2011, 16:51
Сообщение #2


********

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



1. будет как в промпте, т.е. строке просто присваиваем без преобразования. массиву раскидываем по элементам.
3. уже можно
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
_LESTAT_
сообщение 11.8.2011, 19:06
Сообщение #3


****

Apprentice
Сообщений: 103
Регистрация: 12.3.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 13.512
Возраст: 25



Цитата(WKnight @ 10.8.2011, 16:51) *

3. уже можно

Это замечательная новость, предвижу, полную переписку своих скриптов , с целью избавления от ненужные переменных, раз теперь в условных операторах, можно юзать элементы массивов напрямую. Ждем новую версию пилота.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
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

 

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