@Bernhard
Das ist eine verdammt gute Frage. Habe mal ein Testprogramm nur mit der
DLL und zwei Buttons geschrieben zum Testen:
Delphi-Quellcode:
var
Form1: TForm1;
DLLHandle: Integer;
OPAStart:
function: Integer;
cdecl;
OPAConnect:
function(ltsap, rtsap, host: PChar; lpHandle: PDWORD; callback:
PCALLBACK): Integer;
cdecl;
OPAClose:
function(
handle: DWORD): Integer;
cdecl;
OPAFetch:
function(
handle: DWORD; lpOperand: PChar; lpBuffer: PVOID;
BufferSize: DWORD; callback: PCALLBACK): Integer;
cdecl;
OPAWrite:
function(
handle: DWORD; lpOperand: PChar; lpBuffer: PVOID;
BufferSize: DWORD; callback: PCALLBACK): Integer;
cdecl;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
DLLHandle := LoadLibrary('
OpAgent.dll');
if DLLHandle <> 0
then
begin
//Funktionen aus der DLL dynamisch laden
@OPAStart := GetProcAddress(DLLHandle, '
OPAStart');
@OPAConnect := GetProcAddress(DLLHandle, '
OPAConnect');
@OPAClose := GetProcAddress(DLLHandle, '
OPAClose');
@OPAFetch := GetProcAddress(DLLHandle, '
OPAFetch');
@OPAWrite := GetProcAddress(DLLHandle, '
OPAWrite');
//OPAStart;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if DLLHandle <> 0
then
begin
try
FreeLibrary(DLLHandle);
except
showMessage('
2');
end;
end;
end;
Nehme ich das "OPAStart" wieder rein, erhalte ich beim FreeLibrary den selben Fehler wie im eigentlichen Programm. Lasse ich es auskommentiert kann ich so oft ich möchte abwechselnd Button1 und Button2 klicken.
Der Rückgabewert von OPStart ist allerdings nur ein ErrorCode, also kein Zeiger auf ein Objekt oder Ähnliches.
Was mich noch wundert: Das try..excpet..end fängt den Fehler nicht ab sondern wird anscheinend vollkommen ignoriert.
@Muetze1 (roter Kasten sei Dank
)
Nein, daran liegt es leider nicht, da könne auch ruhig mehrere Sekunden vergehen.
@hoika (roter Kasten sei Dank
)
1.) ShareMem ist das erste in der uses-Klausel der Projektdatei, aber wie man weiter oben sieht werden nur PChar genutzt, keine Strings.
2.) Nein, siehe oben in diesem Beitrag.
3.) Wie debugge ich eine Fremd-
DLL zu der mir kein Quelltext vorliegt? Gibts da irgendwo ein empfehlenswertes Tutorial?