Conditional compilation
finalpatch
fengli at gmail.com
Fri Jun 7 05:20:22 PDT 2013
string mixins and template mixins don't work either.
On Friday, 7 June 2013 at 12:14:45 UTC, finalpatch wrote:
> Hi folks,
>
> I need to apply different calling conventions to the same
> interfaces when compiling for different platform. It's
> something like this:
>
> OSX:
>
> interface InterfaceA : IUnknown
> {
> extern(C):
> ...
> }
>
> Windows:
>
> interface InterfaceA : IUnknown
> {
> ...
> }
>
> I have to add extern(C) on OSX because apparently when the
> compiler sees IUnknown it automatically assumes the calling
> convention is extern(Windows) and in order to maintain
> compatibility with existing system I have to explicitly declare
> them as extern(C).
>
> Now I have several dozens of interfaces like the above. I don't
> want to repeat them for OSX and Windows because the interface
> definitions are identical except the extern(C) line.
>
> I have tried using version() like this:
>
> interface InterfaceA : IUnknown {
> version(OSX)
> {
> extern(C):
> }
> ...methohds.
> }
>
> but it doesn't work because version limits the scope of the
> extern(C). static if has the same problem.
>
> In C/C++ this is really easy, I can simply define a macro which
> expands to extern(C) on OSX and nothing on windows. Is there
> any way to achieve this in D without repeating the interface
> definitions?
More information about the Digitalmars-d-learn
mailing list