Hallo zusammen!
Ich versuche gerade DLLs, die ich in Masm32 (32-Bit ASM) schreibe, mit
Delphi aufzurufen. Dies soll für mich später als PlugIn Stelle dienen. Doch irgendwie will das nicht so ganz funktionieren. Vielleicht hat damit schon einer Erfahrung und ist so nett mir weiterzuhelfen.
Hier ist der ASM Quellcode für die DLL:
[snip]
DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
mov eax,TRUE
ret
DllEntry ENDP
CapScreen Proc lpFileName:DWORD
invoke MessageBox, 0, addr lpFileName, NULL, 0
ret
CapScreen endp
[/snip]
Und hier der Delphi Code:
[snip]
type
TScreenShot = procedure(lpFileName: PChar);
var
ScreenShot: TScreenShot;
procedure TForm1.Button1Click(Sender: TObject);
const
DLLName: string = \'../CAPTURE.DLL\';
FuncName: string = \'CapScreen\';
FileName: PChar = \'d:\\test.bmp\';
var
h: tHandle;
begin
h := LoadLibrary(pChar(DLLName));
try try
if h >= 32 then
ScreenShot := GetProcAddress(h, pChar(FuncName))
else
raise eAccessViolation.Create(Format(\'Programm %s nicht gefunden.\',
[DLLName]));
if assigned(ScreenShot) then
ScreenShot(FileName)
else
raise eAccessViolation.Create(Format(\'Funktion %s nicht gefunden\',
[FuncName]));
except
on e: eAccessViolation do
MessageDlg(\'F e h l e r b e i m Z u g r i f f a u f D L L :\'
+ #13#10 + e.Message, mtInformation, [mbOK], 0);
end;
finally
FreeLibrary(h);
end;
end;
[/snip]
Das Problem ist, dass ich als MessageBox einen kryptischen String bekomme, was aber bedeutet, dass die DLL korrekt aufgerufen wird. Also wird die DLL ja anscheinend korrekt angesprochen, nur die Parameter werden falsch übergeben.
Danke für Eure Hilfe,
Michael