For years now, I've been under the impression that the distinction between extern(Windows) and extern(System) actually mattered. I recall extern(System) was first added to the language to resolve this situation for C bindings:

version(Windows) extern(Windows):
else extern(C):

Which, or course, does not work. Yet, it's now been pointed out to me [1] that the documentation says the following [2]:

The Windows convention is distinct from the C convention only on Win32 platforms, where it is equivalent to the stdcall convention.

This implies that extern(Windows) and extern(System) behave the same way. My limited testing on a 64-bit Linux VM shows no problems when binding a C function as extern(C) or extern(Windows), and the disassembly looks the same.


[1]: https://github.com/Extrawurst/DerelictFmod/pull/3
[2]: https://dlang.org/spec/attribute.html#linkage

Reply via email to