Linkage question

frame frame86 at live.com
Mon Jan 24 17:23:01 UTC 2022


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.

```d
// --- 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.


More information about the Digitalmars-d-learn mailing list