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

> Плагины...., Помогите разобраться что с чем есть....
Cockney
сообщение 7.7.2013, 16:10
Сообщение #1


********

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



Всем привет!На днях заглянул в справку пилота и увидел пример плагина.....загорелся написать что-то свое,но......нифига я не разобрался как это все работает....Прошу помощи(IMG:style_emoticons/default/smile.gif)

Особенно мне интересно как передается результат в ParamStruct.Result и передача параметров из скрипта пилота в dll......заранее спасибо.....и если можно мини код вроде 2+2 в виде функции для примера)


Заранее спасибо!


Код
function Function1(AdressPS: Pointer): boolean; stdcall;
var
s :string;

  // function has only one parameter, this is Pointer to the tParamStruct structure
  ParamStruct := AdressPS;

  if ParamStruct^.WindowHandle = 0 then
    s:= 'workwindow not defined'
  else begin
    s:= 'ok, worked' + #9 + 'value, sended to plugin, returned in next element of array';
    s:= s + '/n' + ParamStruct^.ParamString;
  end;
  CopyMemory (@ParamStruct^.Result[0], @s[1], length(s));


  // return value not analized while, may be later
  Result := true;
end;




Что это за функция?и что она делает?при вызове в логе всегда пишет workwindow not defined
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов(1 - 11)
DarkMaster
сообщение 7.7.2013, 17:26
Сообщение #2


***********

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



В справке пилота как раз и содержится код простейшего плагина.
Привязка судя по всем у не сделана.

Сообщение отредактировал DarkMaster - 7.7.2013, 17:29


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


********

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



Цитата(DarkMaster @ 7.7.2013, 17:26) *

В справке пилота как раз и содержится код простейшего плагина.




так я от туда и взял,нифига не пойму.....
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 7.7.2013, 17:46
Сообщение #4


***********

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



Привязка судя по всем у не сделана.

Вообще я имел ввиду вот этот пример:
Код

library Plugin;

uses  windows;

type
  tInitStruct = packed record
    FunctionCount : Cardinal;
    FunctionNames : Array of Pchar;
  end;

  tParamStruct = packed record
    WindowHandle : Cardinal; // Handle of workWindow
    WindowPID    : Cardinal; // pid of process of workWindow
    Reserved     : Cardinal;
    ParamString     : Pchar; // string of parameters with substituted variables
    ParamStringOrig : Pchar; // original string of parameters
    Result : array [0..32767] of char // array for returned values
  end;

var
  ParamStruct: ^tParamStruct;  // init by UOPilot
  InitStruct :  tInitStruct;   // init by plugin, free on unload


function InitPlugin(App, Scr: integer; Var Version: Real):Pointer; stdcall;
// App: Application.Handle of UOPilot
// Scr: reserved
begin
  // check UOPilot version, if it needed
  if Version >= 2.18 then begin
    // exported function count, for UOPilot
    InitStruct.FunctionCount := 2;
    setlength (InitStruct.FunctionNames, InitStruct.FunctionCount);
    // exported function names
    InitStruct.FunctionNames[0] := 'Function1';
    InitStruct.FunctionNames[1] := 'Function2';
  end else
    InitStruct.FunctionCount := 0;

  // if exported function count = 0, then plugin will be unloaded
  Result := @InitStruct;
end;


procedure DonePlugin; stdcall;
begin
  // free memory
  setlength (InitStruct.FunctionNames, 0);
end;


// exported function example
function Function1(AdressPS: Pointer): boolean; stdcall;
var s :string;
begin
  // function has only one parameter, this is Pointer to the tParamStruct structure
  ParamStruct := AdressPS;

  if ParamStruct^.WindowHandle = 0 then
    f:= 'workwindow not defined'
  else begin
    f:= 'ok, worked' + #9 + 'value, sended to plugin, returned in next element of array';
    f:= f + '/n' + ParamStruct^.ParamString;
  end;
  CopyMemory (@ParamStruct^.Result[0], @f[1], length(f));


  // return value not analized while, may be later
  Result := true;
end;

function Function2(AdressPS: Pointer): boolean; stdcall;
begin
  Result := true;
end;


Exports
  InitPlugin,
  DonePlugin,
  Function1,
  Function2;

begin
end.



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


********

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



его я и взял за основу,хорошо,если не привязан,как привязать?писать функцию по нахождению хендла и пихать этот хендл в структуру?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 7.7.2013, 19:37
Сообщение #6


***********

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



Может просто передать его просто в качестве параметра?


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


********

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



Цитата(DarkMaster @ 7.7.2013, 19:37) *

Может просто передать его просто в качестве параметра?





эммм,нет,тут что.то не то....даже если передавать,то как будет выглядеть?в каждом вызове функции указывать хендл?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 8.7.2013, 3:38
Сообщение #8


********

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



Цитата
var
ParamStruct: ^tParamStruct; // init by UOPilot

Цитата
function Function1(AdressPS: Pointer): boolean; stdcall;
var s :string;
begin
// function has only one parameter, this is Pointer to the tParamStruct structure
ParamStruct := AdressPS;

Заполняеися пилотом на основе привязки скрипта.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 8.7.2013, 12:48
Сообщение #9


********

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



Цитата(WKnight @ 8.7.2013, 3:38) *

Заполняеися пилотом на основе привязки скрипта.




благодарю,попробую что то накатать...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 26.7.2013, 20:05
Сообщение #10


********

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



а что так долго выключается пилот при подключенных плагинах?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 27.7.2013, 3:20
Сообщение #11


********

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



Не замечал.
При закрытии пилот ищет во всех плагинах функцию DonePlugin или _DonePlugin, если есть - выполняет ее, и выгружает библиотеку. Больше с ними ничего подозрительного не делает.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 27.7.2013, 9:25
Сообщение #12


********

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



Цитата(WKnight @ 27.7.2013, 4:20) *

Не замечал.
При закрытии пилот ищет во всех плагинах функцию DonePlugin или _DonePlugin, если есть - выполняет ее, и выгружает библиотеку. Больше с ними ничего подозрительного не делает.





не знаю,есть эта процедура(доне),на моей машине закрывается 20-50 сек.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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