Interfacing with XPCOM

Walter Bright newshound1 at
Tue Dec 2 02:23:55 PST 2008

John Reimer wrote:
> In D (windows) it would look like so (assuming you have done away with 
> the compilers internal detection of COM interfaces):
> extern(C++) interface IUnknown:
> {
>     extern(Windows):
>         int QueryInterface(nsIID* uuid, void **result);
>         int AddRef();
>         int Release();
> }
> I bet it would work fine and would be a good way to avoid the 
> special-cased interfaces providing COM support in D.  Instead we've 
> special-cased for C++, which is, at least, a more general case. ;-)

There is one other problem. COM objects are not collected by the garbage 
collector because they are reference counted. Deriving from IUnknown 
means its a COM object which sets a flag in the ClassInfo, directing the 
garbage collector to not collect it. In fact, COM objects are allocated 
using malloc(). IUnknown.Release() uses free() to deallocate them.

More information about the Digitalmars-d mailing list