Ich habe noch ein Fall den ich euch gerne schildern möchte:
Deklaration in C:
Delphi-Quellcode:
typedef unsigned long My_DWORD;
typedef char My_STRING;
My_DWORD start_func
(const My_STRING *name1, // in
const My_STRING *name2, // in
ERROR_T *error ); // out
In der Doku für den Befehl "start_func" steht für den Parameter "Name2" folgendes:
Nullzeiger eintragen.
In einem C Beispiel, welches ich aber nicht debuggen kann, ist der Aufruf so gemacht:
Delphi-Quellcode:
My_STRING *pname2 = NULL;
ErrClass = start_func((My_STRING *)name1, pname2, &ErrStruct);
Ich habe ein fertiges C Programm, welches genau dieses Befehl aufruft, welchen ich nun im Delphi nachprogrammieren möchte.
Das Ergebnis im C Programm ist, dass die Funktion 0 liefert (also kein Fehler). Ich bekomme immer ein Fehler (Result <> 0), also vermute ich ein Fehler bei meiner Parameterübergabe.
Gelöst habe ich es so:
Delphi-Quellcode:
function start_func(Name1: PAnsiChar; Name2: PAnsiChar; aError: PERROR): LongWord;stdcall;external DP_DLL;
Aufruf:
start_func(PAnsiChar(MyNAME1), Nil, @ErrStruct);
Aber egal was ich als zweiten Parameter übergebe (Nil, Leerzeichen etc.) ich bekomme als Result nie eine 0.
Heißt für mich, dass mein Delphi Programm die Funktion anders aufruft wie das C Programm.
Habt ihr noch eine Idee?