Entwickler-Ecke
Dateizugriff - C-Builder DLL nutzen
oldman - Do 21.10.10 14:12
Titel: C-Builder DLL nutzen
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
oldman - Do 21.10.10 16:47
Nee,
es werden ja nur ganz einfache Daten übergeben.
Von der Größe habe ich schon aufgepasst, scheint für mich ein Problem der Compiler zu sein. Warum auch immer.
Übrigenz arbeite ich mit der Version >RAD Studio 2007<
oldman
HelgeLange - Do 21.10.10 18:11
naja, Du deklarierst die funktion in Delphi als stdcall, es gibt aber auch die Möglichkeit, es als cdecl zu deklarieren, so dass Parameter auf einer Art und Weise übergeben werden, die C++ möchte... steht in dem Artikel so drin :)
oldman - Di 26.10.10 08:12
Jau, so hat es dann funktioniert.
Schon alles recht merkwürdig finde ich.
oldman
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!