Dlaczego to nie działa?

thenkles
2002-07-28 12:55
thenkles
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

Pozostało 580 znaków

2002-07-28 13:35

Rejestracja: 17 lat temu

Ostatnio: 1 rok temu

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


Jest jeszcze jeden błąd :)
Unix is user friendly. It's just very particular about who it's friends are.

Pozostało 580 znaków

thenkles
2002-07-28 17:01
thenkles
0

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

Pozdrówka

Pozostało 580 znaków

2002-07-28 18:16

Rejestracja: 17 lat temu

Ostatnio: 1 rok temu

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


Jest jeszcze jeden błąd :)
Unix is user friendly. It's just very particular about who it's friends are.

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0