Interfacing with XPCOM

John Reimer terminal.node at gmail.com
Mon Dec 1 06:43:04 PST 2008


Hello Walter,

> John Reimer wrote:
> 
>> Hello Walter,
>> 
>>> John Reimer wrote:
>>> 
>>>> Hello Walter,
>>>> 
>>>>> So are you saying that XPCOM will work on Linux with D if only the
>>>>> extern(Windows) was actually extern(C++) ?
>>>>> 
>>>> Just to make this clear, I'm banking on that the fact that
>>>> extern(C++) on an interface should also remove the necessity to
>>>> alias to a COM interface on linux.  I am guessing that extern(C++)
>>>> makes a vtable the same as COM minus the extern(Windows)
>>>> decoration.  If this is not exactly true, then my hypothesis won't
>>>> hold. :-)
>>>> 
>>> Neither affects the vtable layout. They affect the calling
>>> convention (register usage, parameter order, stack cleaning, return
>>> value).
>>> 
>> Okay, I'm confused then.  While I understand that the compiler uses
>> specifically uses extern(...) to describe the calling convention, I
>> /assumed/ that the compiler was detecting this the extern(C++) like
>> so:
>> 
>> extern (C++)
>> {
>> interface D
>> {
>> int bar(int i, int j, int k);
>> }
>> D getD();
>> }
>> And converting what would normal be a D interface (with RTTI
>> reference in first element of vtable) to a regular vtable compatible
>> with a C++ class type?
>> 
>> How is the vtable made C++ compatible?
>> 
> You're right, I was wrong.
> 
> It looks like all I need to do is change the default linkage inside
> IUnknown from Windows to System, as System is implemented as Windows
> under windows, and C under linux.
> 


Yes, that would be the fastest way to fix it. Thanks.

-JJR





More information about the Digitalmars-d mailing list