Hallo,
kurz zu meiner Situation:
Ich habe eine Delphi-Anwendung die Funktionen einer C-
DLL benutzt. Die dort enthaltenen Funktionen werden über die "external"-Direktive eingebunden. Eine der Funktionen aus der
DLL erwartet einen Pointer auf eine Callback-Funktion. Dieser Callback-Funktion werden 2 Parameter übergeben BytesTransfered und BytesTotal.
Die übergabe des 2. Parameters ByteTotal klappt, während der Parameter BytesTransfered "ungültige" Daten enthält - also nicht mehr die, die ursprünglich von der C-
DLL übergeben wurden.
Die betroffene Funktion ist in der C-
DLL wie folgt deklariert:
Code:
typedef unsigned long int u32;
static void(*TransPend_pf)(u32,u32);
u32 Connect_u32(const char* ip_addr_ps8, const char* port_ps8,
void(*trans_pend_pf)(u32,u32))
{
TransPend_pf = trans_pend_pf; // Zwischenspeichern
// ....
}
Der Aufruf erfolgt dann später auf folgende Weise:
Code:
if(TransPend_pf != NULL)
{
TransPend_pf(bytes_transferred_u32, bytes_total_u32);
// TransPend_pf(0xAFFE, 0xBEEF); <-- klappt ebenfalls nicht. 1. Parameter ist in Delphi nicht mehr 0xAFFE.
}
Die Deklaration der Funktionen im Delphi-Code sieht so aus:
Delphi-Quellcode:
TConnectCallback = procedure(ByteTransfered: Cardinal; ByteTotal: Cardinal) of object; cdecl;
function Connect_u32(ip_addr: PChar; port: PChar; CBFunc: TConnectCallback): Cardinal; cdecl; external csDLLName;
Kann sich jemand erklären weshalb der Parameter ByteTransfered nicht richtig übergeben wird? Probeweies habe ich die Callback-Funktion in der C-
DLL selber implementiert -> Dort hat dann die Parameterübergabe richtig funktion. Auch wenn ich die Anzahl der Parameter z.B. auf 3 oder 4 erweitere, werden alle richtig übergeben - außer der Erste!
Ich habe keine Idee mehr was ich falsch machen könnte und hoffe hier kann mir jemand weiterhelfen!
Grüße
Dawn