C++ interface vs D and com

Jesse Phillips via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jul 13 13:02:50 PDT 2016


On Wednesday, 13 July 2016 at 02:41:22 UTC, Adam Sansier wrote:
> If you can convince me to try it out, I might... but doing com 
> isn't my primary goal here and I seem to have finished up what 
> I was trying to achieve(my use case is probably relatively 
> simple though). Last thing I want to do is get bogged down in 
> this stuff, which feels clumsy and not well documented(Both the 
> D and C sides)

Juno is definitely of more value if you're trying to access 
standard Windows COM objects, that way you don't have to write 
the interface definitions yourself.

You'd mentioned that you got it work with a hack and there should 
be a better way, Juno might be that better way.

It looks to me like your extern(C++) is needed because you're 
trying to shove the pointer from coCreateInstance into a D class. 
With COM you don't work with concrete classes, only interfaces. 
Code below is not tested and only from limited knowledge.

     IMYCASIO cASIO : IUnknown
     {
         void func1(char *name);
         void func2(int);
     }

     //...
     IMYCASIO obj;
     CoCreateInstance(..., cast(void**) &obj);

     obj.func1("me");

The only other thing I can think is, if you are obtaining an 
object that defines static methods, those aren't supported by 
COM. COM only works on virtual functions and you're probably just 
hacking memory address space to get at those functions.


More information about the Digitalmars-d-learn mailing list