Conditional compilation
finalpatch
fengli at gmail.com
Fri Jun 7 05:14:40 PDT 2013
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