If I declare a function as extern(C) inside a DLL, I have also to cast the function pointer as extern(C) or it fails calling, eg.
// --- my.dll
export extern (C) void log(int mode, string a, string b, string c) {
/* stuff */
}
// --- main.d
alias T = extern (C) void function(int, string, string, string);
auto fnPtr = cast(T)GetProcAddress(/* stuff */);
I understand that the linkage must match but besides the name mangling, what's happen here? What is the difference if I remove the extern (C)
part from the T alias?
Doing that supplies 2nd and 3rd paramter as fine pointers but the 1st argument comes wrong (eg. 10 becomes -218697648) and the last argument is garbage too, so the D-linkage format is something different.
Would like to know where the linkage format is defined, thx.