Hallo ich benutze eine aus c-quellcode erzeugte DLL.
Über diese DLL kommuniziert meine Applikation mit einer Koppelkompenente die als Dienst läuft (Betriebssystem WinXP)
In meiner Applikation muss ich der DLL mehrere Callbackfunktionen bekannt geben.
Das funktioniert im grosen und ganzen. Aber ab und zu gibt es ganz merkwürdige Effekte, dass andere Programmteile rumspinnen. Das tun sie nur dann wennn callback-Aufrufe stattgefunden haben. Es muss also mit den Callbacks zusammenhängen.
Der Quellcode einer Beispielapplikation in C sieht so aus
void FAR PASCAL AklanReceiveDatenTele(HEDE hEde, LPCSTR lpszKanalId, LPCSTR lpszVCode, LPBYTE lpbDaten, int nData);
Jetzt meine Frage an die C-Spezialisten:
wenn in C die function als „void FAR PASCAL“ deklariert ist
Wer entfernt die Parameter vom Stack?
a.) die aufrufende function
oder
b.) die aufgerufene function
Meine Applikation ist in delphi programmiert
bisher verwende ich dort die Declaration-Option
stdcall
callback-procedure
procedure AklanReceiveDatenTele(hAKLan : integer;
lpszKanalId : LPCSTR;
lpszVCode : LPCSTR;
lpbDaten : LPBYTE;
DataLen : integer); stdcall;
option stdcall bedeutet die delphi-procedure entfernt die Parameter vom stack
es gibt aber auch die Option cdecl dann entfernt der Aufrufer die Parameter vom stack
wie verhält sich das bei callback-functions?
daneben gibt es auch noch „normale“ = keine Callback-Aufrufe
function AklanSendDatenTele (hAKLan : integer;
lpszKanalId : LPCSTR;
lpszVCode : LPCSTR;
lpbDaten : LPBYTE;
nData : integer;
nSpool : integer;
nTimeout : integer
) : integer stdcall; external AKLanDLL_Name;
wer entfernt da die Parameter vom stack?