我没有给你答案,但我有过几次这样的经历,我想分享我所做的。
在几个不相关的项目中,我遇到了同样的情况。在一个案例中,我尝试了将近一周的时间来解决依赖关系,但最终我不得不减少损失以保持进度。我最终在 .tlh 文件上使用了 #include(在 DLL 上执行导入将生成这些),然后使用“经典 com”api 调用来获取指向 .tlh 文件中结构的指针。代码不像可以使用包装文件那样干净,但它可以工作。
IUnknown *lpUnk;
hr = CoCreateInstance(clsID, NULL, CLSCTX_LOCAL_SERVER, IID_IUnknown, (void **)&lpUnk);
if (FAILED(hr)) throw SomeException;
//
_Application *app; //Address _Application
hr = lpUnk->QueryInterface(__uuidof(_Application), (void **) &app);
lpUnk->Release();
if (FAILED(hr)) throw SomeException;
// Do stuff with the app object
app->Release(); // Then release
您可以通过使用 CComPtr 包装器模板在其超出范围时使用其析构函数可靠地进行释放,从而对其进行某种程度的“去丑化”:
CComPtr<IUnknown> lpUnk;
hr = CoCreateInstance(clsID, NULL, CLSCTX_LOCAL_SERVER, IID_IUnknown, (void **)lpUnk);
if (FAILED(hr)) throw SomeException;
//
CComPtr<_Application> app; //Address _Application
hr = lpUnk->QueryInterface(__uuidof(_Application), (void **) &app);
if (FAILED(hr)) throw SomeException;
//
// Do stuff with the app object
请注意,_Application 指针是使用 .tlh 文件中的结构之一的示例。