DLL-C++-Header nach Delphi portieren

OP #3131415
Lesenswert?
• ▲
▼
Hallo,

mal eine Frage an die Delphieexperten: Ich habe hier für die Steuerung 
eines Lineardrives (Hiwin D1) eine DLL (mpi.dll) vorliegen. Diese ist 
offenbar mit VisualC++ erstellt worden und laut Hersteller für die 
Verwendung in VisualC++, VisualBasic und Labview geeignet. Zu der DLL 
habe ich auch die zugehörige Headerdatei.
Unsere Software soll allerdings in Delphi 2010 geschrieben werden, u.a. 
weil in Delphi schon eine breite Codebasis vorhanden ist.

Nun ist an und für sich kein Ding den C++-Header auf Delphi zu 
übertragen um die DLL einzubinden. Was mir aber gerade Kopfzerbrechen 
bereitet ist folgende Zeile im Header:
1
class MDCE;
Zum einen verstehe ich diese Zeile nicht so ganz, zum anderen weiß ich 
nicht, wie ich das auf Delphi übertragen könnte. Die Klasse ist aber 
wichtig, weil sie von fast allen Funktionen genutzt wird, um auf die 
geöffnete Kommunikation mit dem Drive zuzugreifen.

Zum Verständnis: wird da eine Klasse ohne Methoden und Variablen 
angelegt? (Ja, die Zeile ist vollständig). Kann der Rest dazu in der DLL 
selber stecken? Oder ist das irgendeine Standardklasse? Habe ich 
überhaupt eine Chance, die DLL unter Delphi nutzbar zu machen?

Nach dem was ich im Internet so finden konnte, scheint es nicht zu 
gehen. Aber wirklich sicher bin ich mir noch nicht. Den Hersteller habe 
ich auch angeschrieben, aber das dauert, bis der antwortet.

Danke schonmal für zielführende Antworten,

Christian
OP #3131435
Lesenswert?
• ▲
▼
Ich weiß nicht, ob ich den ganzen Header posten darf. Hier jedenfalls 
die ersten Zeilen, danach geht es nur noch mit Finktionen weiter.
1
//define 
2
#define STA_TIMEOUT  5
3
#define ADDERR       -100
4

5

6
class MDCE;
7

8
// call this beore any function in case application is not MFC
9
void setMFCmode();
10

11

12
// manage com ( if pcom =NULL ) get the default pcom as created from the last openPcom
13
char * ver(int print);  // if print=1 put message box with MPI dll version, else only return str message with version information
14
MDCE * openDCE( char *pwdin, char *cnfname);

Das Interface müsste C sein. Im Anhang ist auch noch einmal das, was der 
Dependency Walker ausgibt.
Angehängte Dateien:
Gast #3131440
Lesenswert?
• ▲
▼
Christian S. schrieb:
> class MDCE;

ist eine Vorwärtsreferenz.

Vermutlich wird in der headerdatei danach ein pointer oder eine Referenz 
der Klasse verwendet, ohne daß die vollständige Klassendefinition an der 
Stelle bekannt ist.

z.B. sowas hier:

MDCE* pVar;

Über die Vorwärtsreferenz weiß der Compiler, daß das ein Pointer bzw. 
eine Referenz auf eine Klasse ist.

Die vollständige Deifnition von MDCE steht dann woanders.

Oliver
OP #3131456
Lesenswert?
• ▲
▼
Auch das Demoprojekt brachte keine Erleuchtung bzgl. der Klasse MDCE. 
Ein "Gehe zu Deklaration" bzw. "Gehe zu Definition" führt mich immer in 
die Header-Datei.
Was mir grad noch auffiel: zusätzlich gibt es noch eine LIB-Datei, die 
auch im Demoprojekt mit eingebunden ist.
Kann es nun sein, dass die Klasse in der DLL oder in der LIB definiert 
ist?
Gast #3131458
Lesenswert?
• ▲
▼
Christian S. schrieb:
> Auch das Demoprojekt brachte keine Erleuchtung bzgl. der Klasse MDCE.
> Ein "Gehe zu Deklaration" bzw. "Gehe zu Definition" führt mich immer in
> die Header-Datei.
auf soetwas verlässt man sich auch nicht, da sucht man einfach über 
alles files.

> Was mir grad noch auffiel: zusätzlich gibt es noch eine LIB-Datei, die
> auch im Demoprojekt mit eingebunden ist.
klar ist auch notwenig, wenn man nicht die dll dynamisch laden will

> Kann es nun sein, dass die Klasse in der DLL oder in der LIB definiert
> ist?
nein.

Du kannst einfach einen Pointer verwenden. Egal von welchen Type. du 
musst nicht wissen was die Klasse kann.
Gast #3131503
Lesenswert?
• ▲
▼
Zu Delphi gibt es einen ganzen Sack voll Headerdateien für die 
Windows-System-Funktionen (.dll).
Schau Dir die mal an. Das ist nicht sonderlich schwer, vor allem wenn Du 
die C-Header, zu Deinen Bibliotheken hast.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren