{... Здесь идет заголовок файла и определение формы TForm1 и ее экземпляра Form1}
ПРИМЕЧАНИЕ: Следует воздерживаться от использования типа string в библиотечных функциях, т.к. при его использовании существуют проблемы с "разделением памяти". Подробней об этом можно прочитать (правда, на английском) в тексте пустого проекта DLL, который создает Delphi (File -> New -> DLL). Так что лучше используйте PChar, а затем при необходимости конвертируйте его в string функцией StrPas.
Еще вариант
procedure TOptions.SetRunOnStart(const Value: boolean);
var
LibHandle:Integer;
Fc_AutoRun: procedure(Flag:boolean; NameParam, Path:String);
begin
FRunOnStart := Value;
LibHandle := LoadLibrary('autorun.dll');
if LibHandle >=32 then
begin
@Fc_AutoRun := GetProcAddress(LibHandle, 'RunOnWinStart');
Fc_autoRun(Value, Application.title, paramstr(0));
end;
FreeLibrary(LibHandle);
end;
var Form1: TForm1; GetSimpleText: function(LangRus: Boolean): PChar; LibHandle: THandle;procedure Button1Click(Sender: TObject);begin {"Чистим" адрес функции от "грязи"} @GetSimpleText := nil; {Пытаемся загрузить библиотеку} LibHandle := LoadLibrary('MYDLL.DLL'); {Если все OK} if LibHandle >= 32 then begin {...то пытаемся получить адрес функции в библиотеке} @GetSimpleText := GetProcAddress(LibHandle,'GetSimpleText'); {Если и здесь все OK} if @GetSimpleText <> nil then {...то вызываем эту функцию и показываем результат} ShowMessage(StrPas(GetSimpleText(True))); end; {И не забываем освободить память и выгрузить DLL} FreeLibrary(LibHandle);end;
ПРИМЕЧАНИЕ: Следует воздерживаться от использования типа string в библиотечных функциях, т.к. при его использовании существуют проблемы с "разделением памяти". Подробней об этом можно прочитать (правда, на английском) в тексте пустого проекта DLL, который создает Delphi (File -> New -> DLL). Так что лучше используйте PChar, а затем при необходимости конвертируйте его в string функцией StrPas.
Еще вариант
procedure TOptions.SetRunOnStart(const Value: boolean);
var
LibHandle:Integer;
Fc_AutoRun: procedure(Flag:boolean; NameParam, Path:String);
begin
FRunOnStart := Value;
LibHandle := LoadLibrary('autorun.dll');
if LibHandle >=32 then
begin
@Fc_AutoRun := GetProcAddress(LibHandle, 'RunOnWinStart');
Fc_autoRun(Value, Application.title, paramstr(0));
end;
FreeLibrary(LibHandle);
end;
Комментариев нет:
Отправить комментарий