Datentyp für eine Funktion
-
Was willst du jetzt dazu wissen?
-
Ich will wissen, wodurch ich DLGPROC ersetzen muss, damit ich nicht DLGPROC gebrauchen muss, da diese ja in den windows headern drinne ist und die nicht includet werden sollen.
-
DLGPROC sieht so aus. kannst du ja wohl ganz leicht auf deine funktion ändern
typedef INT_PTR (CALLBACK* DLGPROC)(HWND, UINT, WPARAM, LPARAM);
-
void SetRecall(int (*foo)(DWORD,DWORD), DWORD x, DWORD y) { int dw = foo(x,y) }
das _stdcall ist kein ANSI-C, keine Ahnung wo das hinmuß. Versuchsweise würd ichs nach int oder vor foo setzen Guck dir doch im Zweifelsfall die Deklaration in der windows.h an.
Damit sollten sich die 2 stinkenden Stellen (cast nach DLGPROC und Calling Convention von Hand) ausmerzen lassen. OT/BTW war nicht stdcall so, dass die Argumente von links nach rechts auf den Stack wandern?
-
__stdcall muss dahin wo CALLBACK steht. aber CALLBACK ist schon __stdcall
-
Original erstellt von <??>:
**DLGPROC sieht so aus. kannst du ja wohl ganz leicht auf deine funktion änderntypedef INT_PTR (CALLBACK* DLGPROC)(HWND, UINT, WPARAM, LPARAM);**
hä? Das ist die definition von INT_PTR...
-
Original erstellt von Bashar:
**
Damit sollten sich die 2 stinkenden Stellen (cast nach DLGPROC und Calling Convention von Hand) ausmerzen lassen.
**Die Calling Convention von Hand sollte drinne bleiben, die war zu Lernzwecken drin.
Original erstellt von Bashar:
**
OT/BTW war nicht stdcall so, dass die Argumente von links nach rechts auf den Stack wandern?**Ja. Wenn dich sowas interessiert, dann schau dir mal das hier an: http://bkausbk.netfirms.com/callconv.html#STDCALL
Man kann auch das ganze mit long machen:
void SetRecall(long AProc, DWORD x, DWORD y) { DWORD dw; __asm { push y push x call AProc mov dw, eax } printf("PrintAnotherShit() gibt %d zurueck\n", dw); }
[ Dieser Beitrag wurde am 22.03.2003 um 20:47 Uhr von hackbert editiert. ]
-
hä? Das ist die definition von INT_PTR...
quatsch :o
-
jo, hab mich geirrt! Sorry. Hatte das andersherum gedacht, wenn du weißt was ich meine...
-
wenn du weißt was ich meine...
ja
-
hackbert: Öhm ... und warum packst du sie dann von rechts nach links drauf?
-
In dem Text steht doch
Die Parameter werden auch von rechts nach links auf den Stack kopiert wie bei cdecl.
Dann wäre das doch richtig, was er gemacht hat?
-
Hab mich verlesen. Die Parameter werden von rechts nach links auf den Stack gelegt, also der letzte Parameter zuerst und der erste zuletzt.