Autor Beitrag
oldman
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 21.10.10 15:12 
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:
ausblenden 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:
ausblenden 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 user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Do 21.10.2010 um 15:56
Moderiert von user profile iconMartok: Code- durch Delphi/C-Tags ersetzt
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Do 21.10.10 16:15 
hilft das vielleicht ? Klick mich

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
oldman Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 21.10.10 17: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Do 21.10.10 19: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 :)

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
oldman Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 26.10.10 09:12 
Jau, so hat es dann funktioniert.

Schon alles recht merkwürdig finde ich.


oldman