我沒有對你的答案,但我有過幾次這樣的經歷,我想分享我所做的。
在幾個不相關的項目上,我有你的相同的場景。爲了解決依賴關係,我嘗試了將近一週的時間,但最終我不得不削減自己的損失以保持按期進行。我最終在.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