我已經構建了一個使用兩個COM服務器DLL的COM客戶端應用程序;我想這個應用程序運行時沒有COM註冊 - 即:winsxs/.manifests調試COM免費註冊(C++)
我得到(...幾乎預期...)「類未註冊」消息,當我嘗試創建我的COM對象的實例從我的客戶應用程序。
我已經成功的那種配置之前,但我不明白爲什麼這一次失敗。
這裏有一些更多的細節:
- 模塊我有:
- 一個MFC客戶端,取決於2個COM服務器(dll1.dll和dll2.dll)
- dll1.dll COM服務器依賴於dll2.dll
- dll2.dll沒有COM依賴項
個
COM對象,我有:
- 在dll1.dll(的.idl語言)
- 在DLL 2
- -
[ object, uuid(262D00FB-3B9F-4A76-98FC-3051FDCAF0A6), dual, nonextensible, helpstring("IDialogManager Interface"), pointer_default(unique) ] interface IDialogManager : IDispatch{ }; [ uuid(58562535-BCA5-4D04-BB92-78F90EDA201E), //... ] dispinterface _IDialogManagerEvents { }; [ uuid(D599D3F0-A4D1-44A7-87A9-16032CC613CA), //... ] coclass DialogManager { [default] interface IDialogManager; [default, source] dispinterface _IDialogManagerEvents; };
。 dll
-
[
object,
uuid(2A183A2E-A620-4E00-B657-C9D2E59201D4),
nonextensible,
helpstring("ICadWizardsManager Interface"),
pointer_default(unique)
]
interface ICadWizardsManager : IDispatch{
};
[
object,
uuid(FE97F3FB-8930-43BC-947D-64C90F45A071),
nonextensible,
helpstring("ICadWizard Interface"),
pointer_default(unique)
]
interface ICadWizard : IDispatch{
};
[
uuid(5365D4E6-ADFB-4429-9DEA-C44CC94AA3EF),
]
dispinterface _ICadWizardEvents
{
};
[
uuid(CAC2D0BF-AD5B-4CC8-A04D-53AB23A0CDF4),
]
coclass CadWizard
{
[default] interface ICadWizard;
[default, source] dispinterface _ICadWizardEvents;
};
[
uuid(3164FAC4-6F5F-4E4D-9B09-DC4115850D78),
]
dispinterface _ICadWizardsManagerEvents
{
};
[
uuid(707CB6C8-311E-45EC-9DCB-50477F588BAF),
]
coclass CadWizardsManager
{
[default] interface ICadWizardsManager;
[default, source] dispinterface _ICadWizardsManagerEvents;
};
-
- 客戶端調用
-
IDialogManagerPtr dialogManager;
dialogManager.CreateInstance(CLSID_DialogManager); // <<< returns "Class not registered"
-
- 的client.exe.2.manifest
-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="client" version="1.0.0.0" type="win32" processorArchitecture="x86"/>
<file name="dll2.dll">
<comClass
clsid="{707CB6C8-311E-45EC-9DCB-50477F588BAF}"
threadingModel="apartment">
</comClass>
<comClass
clsid="{CAC2D0BF-AD5B-4CC8-A04D-53AB23A0CDF4}"
threadingModel="apartment">
</comClass>
</file>
<file name="dll1.dll">
<comClass
clsid="{D599D3F0-A4D1-44A7-87A9-16032CC613CA}"
threadingModel="apartment">
</comClass>
</file>
</assembly>
-
我的SxS激活上下文生成過程中沒有錯誤: - 中沒有錯誤窗口日誌(應該意味着我的清單語法是正確的) - 沒有檢測到錯誤sxstrace(日誌以「INFO:激活上下文生成成功結束。「消息,不包含錯誤或sucpicious消息;此外,我看到我的表現是否正確裝入)
任何想法
有沒有辦法來調試的SxS更深,隨着sxstrace獲得的實際註冊名單? COM或提前
你在實現雙接口嗎? – wqw
我編輯了我的帖子,添加IDialogManager,ICadWizardsManager和ICadWizard的完整idl定義;這是我實現 – loic