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;
// Одной из функций крайне желательно делать подсказку по плагину, // если собираетесь его распространять, да и даже если не собираетесь, // чтоб потом через несколько лет себе же напомнить что оно делает. // Например вывод простой формочки с текстом.