Interfacing with XPCOM

John Reimer terminal.node at gmail.com
Sun Nov 30 18:40:04 PST 2008


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++) ?
>>> 
>> Yes, I think so.  But I should probably test the theory with dmd 2.0
>> first just to make sure.  This is just about over my head since I'm
>> not too familiar with C++ internals.  In terms of XPCOM, I believe
>> that when an interface is assigned an implementation pointer and the
>> interface method is called, the most important detail is that the
>> /parameter/ signature at a specific vtable index match that of the
>> implementation's at the same index:  that is, the method names are
>> not important except as an alias for client to use; it is assumed
>> that the interface methods will match the calling convention and
>> argument types of the implementation which was assigned to it).
>> 
>> So my question would be, in terms /calling conventions/ in an
>> /interface/ (not a class), does extern(System)  differ in any way
>> from extern(C++).  Does a "this" pointer get prepended to the
>> argument list of a C++ method call?  I apologize if this is an
>> ignorant question.  I'm almost clueless here.  I'm assuming that the
>> only difference in the extern(C++) is that it:
>> 
>> (1) changes the interface to have a "normal" vtable (as XPCOM needs)
>> and (2) allows for a system calling convention (method name not being
>> important other than that the parameters of interface and
>> implementation match).
>> 
> The system linkage was devised to match the Microsoft "syscall"
> convention. It really has no meaning on linux, so we can make it
> whatever it needs to be.
> 
> The C++ convention is designed to match whatever C++ does on the
> target platform. Since Linux doesn't have any Windows or System
> calling convention, it would seem that C++ is the one.
> 


So extern(System) does not translate to extern(C)?   Does that mean that 
all extern(System)'s in my code are defaulting to extern(D)?

That'd be a shocker to me. :)  If that's true, it would certainly change 
my understanding of what I thought was making my code work. :D

-JJR





More information about the Digitalmars-d mailing list