我没有对你的答案,但我有过几次这样的经历,我想分享我所做的。
在几个不相关的项目上,我有你的相同的场景。为了解决依赖关系,我尝试了将近一周的时间,但最终我不得不削减自己的损失以保持按期进行。我最终在.tlh文件上使用了一个#include(在DLL上执行导入将生成这些文件),然后使用“classic com”API调用来获取指向.tlh文件中结构的指针。代码并不像使用包装文件那样干净,但它可以工作。
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指针:
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包装模板从它的析构函数做得可靠释放时,它超出范围“去丑化”这是使用.tlh文件中某个结构的示例。
最初,我有一个解决方案,其中包含所有三个项目以及依赖关系。这没有奏效。现在我正在玩三个项目文件,使用devenv.com命令按顺序逐个构建它们。 – xtofl 2008-09-26 14:21:54