AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++ DLL in Delphi einbinden

Ein Thema von runger · begonnen am 1. Jul 2004 · letzter Beitrag vom 2. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2      
runger
(Gast)

n/a Beiträge
 
#1

C++ DLL in Delphi einbinden

  Alt 1. Jul 2004, 06:59
Hallo,
ich habe folgendes Problem:
ich möchte eine in C++ geschriebene DLL in Delphi benutzen.
Die Deklaration der einzigen Funktion ist bekannt:

Code:
- 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;   
      };
In Delphi hab ich die Typdeklarationen so festgelegt:

Delphi-Quellcode:
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;
Nun gibts zwei Probleme:

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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: C++ DLL in Delphi einbinden

  Alt 1. Jul 2004, 07:02
Könntest du mal bitte die Tabs im oberen Code duch Leerzeichen ersetzten? Dann kann man das auch lesen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: C++ DLL in Delphi einbinden

  Alt 1. Jul 2004, 07:06
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.
  Mit Zitat antworten Zitat
runger
(Gast)

n/a Beiträge
 
#4

Re: C++ DLL in Delphi einbinden

  Alt 1. Jul 2004, 07:19
Hallo tut mir leid, dass das so unformatiert aussah, konnte ich aber leider nicht sehen.

Code:
- 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;  
      };
Das Problem ist: ich habe weder den Quellcode noch sonst irgendwelche Informationen über diese DLL muss aber damit arbeiten.

Rainer
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

Re: C++ DLL in Delphi einbinden

  Alt 1. Jul 2004, 07:23
Wenn der Inhalt der Records bekannt ist, dann deklarier die eine Funktion doch so:

Delphi-Quellcode:
type
  PTRAB = ^TRAB;

function versacom(tr: PTRAB; otrailer: PChar): integer; external [DLLName]+'.dllname 'versacom';
Bei geht so was immer.
Oder du benutzt LoadLibrary und GetFuntionEntryPoint oder wie das auch alles heissen mag.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: C++ DLL in Delphi einbinden

  Alt 1. Jul 2004, 07:27
Na dann deklariere erst mal alle arrays wie ich es angegeben habe.
Die records sind wahrscheinlich packed record.
uchar sollte als Byte uebersetzt werden.

function versacom(var tr: TRAB; otrailer: PChar): Integer; stdcall; Das ist die wahrscheinlichste Deklaration fuer die Funktion.
  Mit Zitat antworten Zitat
runger
(Gast)

n/a Beiträge
 
#7

Re: C++ DLL in Delphi einbinden

  Alt 2. Jul 2004, 07:20
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
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: C++ DLL in Delphi einbinden

  Alt 2. Jul 2004, 08:33
Das müsste so stimmen. Kennst du schon das Dll-Tutorial von Assarbad? Dort gibt es auch eine umfangreiche der Datentypen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: C++ DLL in Delphi einbinden

  Alt 2. Jul 2004, 09:22
Moin!

Kann es sein, das du Speicher für den PChar alloziieren musst? Stichwort StrAlloc()...

MfG
Muetze1
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#10

Re: C++ DLL in Delphi einbinden

  Alt 2. Jul 2004, 10:33
Der C char[2] (2 Byte) ist ungleich dem Pascal String[2] (3 Byte).

Ich würde die Strukturen nochmal prüfen.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz