Dlaczego to nie działa?

0

Mam bibliotekę ładowaną dynamicznie:

procedure Tplugins.listaClick(Sender: TObject);
var
DLL : THandle; * uchwyt biblioteki
pluginit : function:string;
begin

DLL := LoadLibrary(PChar(pliki.strings[lista.itemindex])); * laduj biblioteke
try
@pluginit := GetProcAddress(DLL, 'pluginit'); * laduj procedure
if @pluginit = nil then raise Exception.Create('Plug''in jest uszkodzony.');
label1.caption:=pluginit; * wywolaj procedure
finally
FreeLibrary(DLL); * wreszcie zwolnij pamiec

open.Enabled:=true;
end;
end;

Biblioteka wygląda tak:

library plug;

uses
Windows, dialogs;

function pluginit:string; stdcall;
begin
showmessage('Przykladowa wtyczka');
result:='Przykladowa wtyczka';
end;

exports * eksportuj procedurę
pluginit name 'pluginit';

begin
end.

I teraz problem polega na tym, że funkcja się wykonuje, ale nie zwraca wartości :( Wiecie może o co tu chodzi?---------------------------
Delphi 6

Pozdrówka

0

Nie przekazuj wartości jako string tylko jako PChar lub ShorString. Jeżeli chcesz koniecznie używać string to musisz przeczytać tą informację w bibliotece dołączaną na górze dot. ShareMem.

Program:

var
DLL : HMODULE; * uchwyt biblioteki
pluginit : function:PChar;
begin
DLL:=0;
pluginit:=nil;
DLL := LoadLibrary('plug.dll'); * laduj biblioteke
try
@pluginit := GetProcAddress(DLL, 'pluginit'); * laduj procedure
if not Assigned(pluginit) then raise Exception.Create('Plug''in jest uszkodzony.');
label1.caption:=StrPas(pluginit); * wywolaj procedure
finally
if DLL&lt&gt0 then begin
FreeLibrary(DLL); * wreszcie zwolnij pamiec
DLL:=0;
end;
end;

Biblioteka:

function pluginit:PChar; stdcall;
begin
showmessage('Przykladowa wtyczka');
result:='Przykladowa wtyczka';
end;

exports * eksportuj procedurę
pluginit name 'pluginit';--Jest jeszcze jeden błąd ... :)

--------------Blok reklamowy :) -----
kanał: #4programmers.net lub #4programmers
w sieci POLNet
serwer np.: warszawa.ircnet.pl

0

Ok, działa. Ale jeszcze jedno. Jak dynamicznie zaimportować procedurę z parametrami?---------------------------
Delphi 6

Pozdrówka

0

thenkles napisał:
Ok, działa. Ale jeszcze jedno. Jak dynamicznie zaimportować procedurę z parametrami?
&gt
Tak samo, tylko nie piszesz:
plugin:function:Char;

tylko:
plugin:function(parametr1:JakiśTyp;parametr2:JakiśInnyTyp):ZwracanaWartość--Jest jeszcze jeden błąd ... :)

--------------Blok reklamowy :) -----
kanał: #4programmers.net lub #4programmers
w sieci POLNet
serwer np.: warszawa.ircnet.pl

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.