我在COM中比較新,所以如果這是一個愚蠢的問題appologies。我有一堆COM接口編譯到類型庫A。此類型庫是我解決方案中的一個DLL(a.dll)中的資源。在一個單獨的類型庫(B)中,它將進入一個單獨的DLL(b.dll)我想定義一個實現來自類型庫A的接口的coclass。看到IDL代碼以下爲我心裏有一個簡單的例子:COM coclass實現另一個類型庫的接口
import "oaidl.idl";
import "ocidl.idl";
// Import IMyInterface, which is part of MyLibA.tlb
import "MyInterface.idl";
[
uuid(E80492A8-1E8C-4ABF-B4DE-9C252C445AFE),
version(1.0),
helpstring("MyLibB Type Library")
]
library MyLibB
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
importlib("MyLibA.tlb);
[
uuid(25E3CD5E-FA06-4845-BE3E-F260985AFB20),
helpstring("My CoClass")
]
coclass MyCoClass
{
[default] interface IMyInterface;
};
};
我可以編譯上述確定,但是當我在OLEVIEW打開由MIDL生成的TLB文件,我得到一個錯誤信息TYPE_E_CANTLOADLIBRARY
。我開始懷疑我想做什麼是不可能的。到目前爲止,我的實驗表明,類型庫需要包含coclass與coclass定義本身一起實現的所有接口。這是真的?
如果刪除了importlib("MyLibA.tlb);
語句,我可以查看在OLEVIEW編譯TLB文件而不錯誤,但MyLibB.tlb然後還包含IMyInterface
接口的定義,即,該接口在兩個類型庫定義了兩次。我不想要這個,因爲在我的應用程序中,我使用免註冊的COM加載了a.dll和b.dll。在這種情況下,當它在多個類型庫中遇到相同的接口定義時,激活上下文生成將失敗。
任何建議如何我可以在單獨的類型庫中實現所需的接口和coclass分離?
謝謝,工作,我現在可以查看OLEView中的MyLibB.tlb的tlb。我沒有註冊MyLibA.tlb的原因是因爲我使用免註冊的COM。 – themik81 2013-03-11 16:27:48
我已刪除評論並將其添加爲答案,以防別人認爲它有用。 – 2013-03-11 16:49:18