No witam, mam problem z pluginem. Wydaje mi się, że wszystko powinno działać ok, jednak tak nie jest. Aplikacja, która korzysta z pluginów to usługa Windows, więc ciężko jest to debugować.
W każdym razie, po krótce kod wygląda tak:
var
FAppInterface: IAppInterface;
lHandle: THandle
ConnectProc: procedure(const AppIFace: IAppInterface; AppConnectionString: PChar);
begin
//TPlugin to obiekt dziedziczący po TInterfacedObject i implementujący konkretny interfejs
//w konstruktorze jest tylko inherited
FAppInterface:=TPlugin.Create;
//załadowanie biblioteki
lHandle:=LoadLibrary('plugin.dll'); //poprawna nazwa pliku
//pobranie adresu procedury
@ConnectProc:=GetProcAddress(lHandle, 'Connect');
if @ConnectProc = nil then
begin
InvalidPlugin:=true;
end else
begin
ConnectProc(FAppInterface, PChar(AppDBConnectionString));
end;
//reszta kodu
end;
Usługa wywala się na ConnectProc. Do dll już nie wchodzi.
Podejrzewam, że to może chodzić o coś z interfejsem albo rzutowaniem na PChar. Ale nie mam pojęcia.
Interfejs jest potrzebny do tego, żeby dll mogło wywoływać różne metody w programie.
Procedura w dllce ma dyrektywę stdcall.
O co tu może chodzić?