D - function pointers and calling conventions
- Pavel Minayev (20/20) Feb 06 2002 It seems that D function pointers always have the D calling
- Walter (3/23) Feb 06 2002 You're right. I'll have that fixed in the next update. -Walter
It seems that D function pointers always have the D calling convention. Try: import c.stdio; extern(Windows) void (*func)(int, int, int); extern(Windows) void foo(int a, int b, int c) { printf("%d %d %d\n", a, b, c); } int main() { func = &foo; (*func)(1, 2, 3); return 0; } Pointers to stdcall functions are needed, however, for LoadLibrary/ GetProcAddress way to use DLLs. They're also used in TinyPTC. BTW it took me about 5 hours (!) to figure this out. I just couldn't get why the same code works in C but fails in D. Stack dumps, printfs all around the code... till I finally disassembled both OBJs and looked at the code there =)
Feb 06 2002
You're right. I'll have that fixed in the next update. -Walter "Pavel Minayev" <evilone omen.ru> wrote in message news:a3r52s$29gs$1 digitaldaemon.com...It seems that D function pointers always have the D calling convention. Try: import c.stdio; extern(Windows) void (*func)(int, int, int); extern(Windows) void foo(int a, int b, int c) { printf("%d %d %d\n", a, b, c); } int main() { func = &foo; (*func)(1, 2, 3); return 0; } Pointers to stdcall functions are needed, however, for LoadLibrary/ GetProcAddress way to use DLLs. They're also used in TinyPTC. BTW it took me about 5 hours (!) to figure this out. I just couldn't get why the same code works in C but fails in D. Stack dumps, printfs all around the code... till I finally disassembled both OBJs and looked at the code there =)
Feb 06 2002