February 06, 2002 function pointers and calling conventions | ||||
---|---|---|---|---|
| ||||
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 =) |
February 07, 2002 Re: function pointers and calling conventions | ||||
---|---|---|---|---|
| ||||
Posted in reply to Pavel Minayev | 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 =) > > |
Copyright © 1999-2021 by the D Language Foundation