Extern C and Symbol Mangling

Oleksii via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri May 26 06:05:12 PDT 2017


On Friday, 26 May 2017 at 12:51:20 UTC, Stanislav Blinov wrote:
> On Friday, 26 May 2017 at 12:49:27 UTC, Oleksii wrote:
>> Hi,
>>
>> I'm trying to link against a DLL which exports a bunch of C 
>> functions. The issue is: C symbols do not have underscore 
>> prefix in Windows, but DMD sticks underscore in front of the 
>> symbol name. For example: `extern(C) void Foo()` becomes 
>> `_Foo`.
>>
>> Is there a way to disable that underscore?
>
>
> Use extern(Windows), or the more general extern(System), which 
> will expand to either extern(C) or extern(Windows), depending 
> on the OS you target.

Great thanks, it helped in deed. I still wonder why, since I 
expected `extern(Windows)` to be equal to `__stdcall`, which 
should have produced a mangled name `?Foo at 0` instead of `Foo`, 
and I can clearly see in the Dependency Walker, that there's no 
such symbol in the DLL.


More information about the Digitalmars-d-learn mailing list