Hallo,
ich habe eine DLL welche ich mit dem C-Builder erstellt habe und die mit Delphi genutzt werden soll.
Es läuft soweit auch alles gut, bis auf die Tatsache dass, wenn ich meine Procedure in Delphi verlasse eine Exception ausgelößt wird. (EAccessViolation)
Gerade beim Rumspielen noch bemerkt, der Fehler tritt nur auf wenn das Delphi-Projekt im ReleaseMode erzeugt wird und Codeoptimierung eingeschaltet ist.
Hat Jemand schon einmal solch einen Fehler gehabt und kennt eine Lösung des Problems?
Die Funktion ist folgendermassen definiert:
C-Builder:
C-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| extern "C" { __declspec(dllexport) bool func1(unsigned short int value1, unsigned short int value2); }
__declspec(dllexport) bool func1(unsigned short int vendorID, unsigned short int productID) { vID = vendorID; pID = productID; return true; } |
Delphi:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| type TFNfunc1_STDCALL = function(value1, value2: Word ): boolean; stdcall;
var func1_STDCALL: TFNfunc1_STDCALL = nil;
procedure_1: lib := LoadLibrary('MyTestLib.dll'); @func1_STDCALL := GetProcAddress(lib, '_func1');
procedure TForm1.Button2Click(Sender: TObject); var vendorID : Word ; productID : Word ; callOk : boolean; I:Word; begin vendorID := 1003; productID := 8211; callOk := func1_STDCALL(vendorID, productID);
if callOk = True then begin ShowMessage('func1_STDCALL ok'); end else begin ShowMessage('func1_STDCALL nicht ok !!'); end; ShowMessage('Die Message wird noch angezeigt!'); end; |
besten Dank im voraus
oldman
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Do 21.10.2010 um 15:56
Moderiert von
Martok: Code- durch Delphi/C-Tags ersetzt