![]() |
C++ DLL in Delphi einbinden
Hallo,
ich habe folgendes Problem: ich möchte eine in C++ geschriebene DLL in Delphi benutzen. Die Deklaration der einzigen Funktion ist bekannt:
Code:
In Delphi hab ich die Typdeklarationen so festgelegt:
- int versacom(TRAB *tr, char * otrailer),
- TRAB Struktur: TRAB { int prio; int typ; int optim, repeat, service, tel_hie, group_tra; int station; AVER aver; AVERI averi; long duration; char value[6]; int tostate, tipair, pronum, ontime, offtime; char b1; int promask, wkday, time_cycle, fun; char loadtel[26], lt_ntrail[26], msg[70], msg_bin[200]; - AVER und AVERI Struktur: AVER { uchar region, section[4], class[2], division[2]; }; AVERI { long senu; int relay; };
Delphi-Quellcode:
Nun gibts zwei Probleme:
type
AVER=record region:char; section:string[4]; clas:string[2]; division:string[2]; end; AVERI=record senu:longint; relay:integer; end; TRAB=record prio:integer; typ:integer; optim:integer; repeate:integer; service:integer; tel_hie:integer; group_tra:integer; station:integer; aver:aver; averi:averi; duration:longint; value:string[6]; tostate:integer; tipair:integer; pronum:integer; ontime:integer; offtime:integer; b1:char; promask:integer; wkday:integer; time_cycle:integer; fun:integer; loadtel:string[26]; lt_ntrail:string[26]; msg:string[70]; msg_bin:string[200]; end; 1.) Wenn ich versuche die Funktion zu deklarieren nimmt er nur einen Parameter. 2.) Ich bekomme was ich auch tue eine Zugriffsverlezung. Weiss jemand weiter? Rainer |
Re: C++ DLL in Delphi einbinden
Könntest du mal bitte die Tabs im oberen Code duch Leerzeichen ersetzten? Dann kann man das auch lesen.
|
Re: C++ DLL in Delphi einbinden
Poste mal das .h file hier und zwar ohne Tabulatoren und vollstaendig.
string[xx] ist nicht gut. Nimm array [0..xx-1] of Char. Was soll 1. denn heissen? 2. bedeutet das die Struktur nicht die richtige Groesse hat. Das packicng der Elemente ist auch noch nicht geklaert. Die calling convention (cdecl oder stdcall) muss bestimmt werden. |
Re: C++ DLL in Delphi einbinden
Hallo tut mir leid, dass das so unformatiert aussah, konnte ich aber leider nicht sehen.
Code:
Das Problem ist: ich habe weder den Quellcode noch sonst irgendwelche Informationen über diese DLL muss aber damit arbeiten.
- int versacom(TRAB *tr, char * otrailer),
- TRAB Struktur: TRAB { int prio; int typ; int optim,repeat,service,tel_hie,group_tra; int station; AVER aver; AVERI averi; long duration; char value[6]; int tostate,tipair,pronum,ontime,offtime; char b1; int promask,wkday,time_cycle, fun; char loadtel[26],lt_ntrail[26],msg[70],msg_bin[200]; - AVER und AVERI Struktur: AVER { uchar region,section[4],class[2],division[2]; }; AVERI { long senu; int relay; }; Rainer |
Re: C++ DLL in Delphi einbinden
Wenn der Inhalt der Records bekannt ist, dann deklarier die eine Funktion doch so:
Delphi-Quellcode:
Bei geht so was immer.
type
PTRAB = ^TRAB; function versacom(tr: PTRAB; otrailer: PChar): integer; external [DLLName]+'.dll' name 'versacom'; Oder du benutzt LoadLibrary und GetFuntionEntryPoint oder wie das auch alles heissen mag. |
Re: C++ DLL in Delphi einbinden
Na dann deklariere erst mal alle arrays wie ich es angegeben habe.
Die records sind wahrscheinlich packed record. uchar sollte als Byte uebersetzt werden.
Delphi-Quellcode:
Das ist die wahrscheinlichste Deklaration fuer die Funktion.
function versacom(var tr: TRAB; otrailer: PChar): Integer; stdcall;
|
Re: C++ DLL in Delphi einbinden
Hallo,
den Funktionsaufruf hab ich jetzt! Das prog wurschtelt auch in der DLL rum. Irgendwann bekomme ich die Exception: access violation at 0x00000000... Stimmen die Übergabestrukturen nicht? Was ist mit den C++ Typen? C++ D7 ------------------------- int integer long longint stimmt das? Im Internet steht darüber einmal das und einmal das. Robert, ich habe alles was du vorgeschlagen hast umgesetzt. Vielen Dank im vorraus Rainer |
Re: C++ DLL in Delphi einbinden
Das müsste so stimmen. Kennst du schon das
![]() |
Re: C++ DLL in Delphi einbinden
Moin!
Kann es sein, das du Speicher für den PChar alloziieren musst? Stichwort StrAlloc()... MfG Muetze1 |
Re: C++ DLL in Delphi einbinden
Der C char[2] (2 Byte) ist ungleich dem Pascal String[2] (3 Byte).
Ich würde die Strukturen nochmal prüfen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz