How to use Com object (it comes from other dll) in D? Thanks.

rikki cattermole rikki at cattermole.co.nz
Thu Feb 22 13:15:11 UTC 2018


On 23/02/2018 2:12 AM, FrankLike wrote:
> Hi,everyone,
>   I want use the Com object (it comes from other dll) in D,but the 
> core.sys.windows.objidl:QueryInterface Fuction not work.
> For example:
> 
> 
> import core.sys.windows.windef;
> import core.sys.windows.basetyps;
> import core.sys.windows.uuid;
> import core.sys.windows.com;
> import 
> core.sys.windows.objbase:CoInitialize,CoUninitialize,CoCreateInstance;
> import core.sys.windows.objidl;//:QueryInterface
> import core.sys.windows.shlobj;//:IShellLink
> import core.sys.windows.unknwn;
> 
>      if(lpszLnkFileDir is null) return;
>      HRESULT hr;
>      IShellLink* pLink;
>      IPersistFile* ppf;
> 
>      hr = CoCreateInstance(&CLSID_ShellLink,NULL, 
> CLSCTX_INPROC_SERVER,&IID_IShellLinkA,cast(PVOID*)&pLink);//cast(PVOID*)
> 
>      writeln("CoCreateInstance ");
>      if(FAILED(hr))
>      {
>          writeln("FAILED(hr) ");
>          return ;
>      }
>      writeln("  pLink is "~pLink.to!string);
>      writeln("will QueryInterface hr is "~hr.to!string);
>      writeln(IID_IPersistFile.to!string);
>      hr = pLink.QueryInterface(&IID_IPersistFile, cast(PVOID*)&ppf);// 
> err <-
>      writeln("pLink.QueryInterface ");
> 
> -----------------------------------------------------
> It stops in 'hr = pLink.QueryInterface(&IID_IPersistFile, 
> cast(PVOID*)&ppf);'
> But  the same c++ code is ok.
> Who can help me?
> Thanks.

Reminder classes in D are already references, no need for pointers to them.



More information about the Digitalmars-d-learn mailing list