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








"Walter" <walter digitalmars.com>