Entwickler-Ecke

Sonstiges (Delphi) - DLL Initialisierung


jojo-sp - Fr 16.01.09 16:52
Titel: DLL Initialisierung
Moinsen,

ich stehe gerad auf dem Schlauch :-)

Ich habe folgenden Code aus einem C Beispiel zum Aufrufen einer Dll-Funktion:


C#-Quelltext
1:
EXT DWORD IMP OpenIsdcl(VOID);                    


(Rückgabewert <> 0 alles OK, = 0 Fehler)

Ich habe ihn wie folgt in Delphi implementiert:


Delphi-Quelltext
1:
function OpenIsdcl: LongInt; stdcallexternal 'isdcl.dll';                    


Leider bekommen ich immer eine 0 Zurück. Auf dem Rechner läuft bereits ein Tool (ohne Quelltext), dass dieselbe DLL verwendet und keine Zicken macht.

Vielleicht habe ich auch nur Falsch übersetzt?

MfG Johannes


wirbeldelphi - Fr 16.01.09 19:45

Warum LongInt (signed 32bit), müßte das nicht Longword (DWORD = unsigned 32bit) sein?


jaenicke - Fr 16.01.09 20:21

Btw. gibt es DWORD auch in Delphi. ;-)
Was mir bei dem C-Quelltext nicht so klar ist ist was das void in den Klammern heißt. Gibt es da vielleicht einen Parameter?


wirbeldelphi - Fr 16.01.09 20:37

void = kein parameter


Martok - Sa 17.01.09 16:53

Interessant wären noch die EXT und INT Macros und was die dann so an Code generieren, außer __dllexport()...


jojo-sp - Do 22.01.09 10:39

Hallo,

war ein paar Tage unterwegs ohne Internet :-( :-).

Der betreffende Bereich der include Datei sieht wie folgt aus:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
// Import from dll

#ifndef VC6

#define EXT extern "C" __stdcall
#define IMP __import

#else

#define EXT
#define IMP __stdcall

#endif


EXT DWORD IMP OpenIsdcl(VOID);
EXT DWORD IMP CloseIsdcl(VOID);

... Noch weitere dll proceduren/funktionen

//extern "C" __stdcall DWORD __import

#endif


Ich sehe da zumindest nichts besonderes.


Martok - Do 22.01.09 16:58

Gut, ich auch nicht. Eventuell muss man die DLL noch irgendwie initialisieren?

Hast du zufällig ein komplettes Minimal-Beispiel, was man mal vollständig übersetzen könnte? Wenns dann auch nicht geht, ist das Problem ein anders ;)


jojo-sp - Fr 23.01.09 09:39

Laut der Beschreibung muss man zur Initialisierung nur die Open-Funktion ansprechen. Leider habe ich kein Beispiel wie die DLL genau angesprochen werden muss. In der Beschreibung steht eigentlich auch nur das drin, was ich bereits mache. Vielleicht nochmal drüber schlafen und die Idee kommt... vielleicht :-)


BenBE - Di 27.01.09 16:04

Ggf. kannst Du ja mal den vollständigen C-Code und die Beschreibung der DLL uppen, vielleicht kommt man damit etwas weiter ...