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

> 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
сообщение 16.7.2011, 15:19
Сообщение #2


********

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



Цитата
доделать немного findcolor? (чтоб не нужно было прибавлять смещения угла области поиска)
тут бы поточнее немного. найденые координаты всегда выдавались относительно прикрепленного окна. сейчас сделал, что если указано abs, то выдаются относительно экрана.

оно кстати в первом способе так и выдавалось...

Сообщение отредактировал WKnight - 16.7.2011, 15:52
Пользователь в офлайне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
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
WKnight   1. будет как в промпте, т.е. строке просто присваи...   10.8.2011, 16:51
Zeleax   1. будет как в промпте, т.е. строке просто присва...   10.8.2011, 16:54
_LESTAT_   3. уже можно Это замечательная новость, предвиж...   11.8.2011, 19:06
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:03
Designed by Nickostyle