Tôi đã tạo ứng dụng khách COM sử dụng hai dll máy chủ COM; Tôi muốn ứng dụng này chạy mà không cần đăng ký COM - ví dụ: winsxs/.manifestsgỡ lỗi đăng ký miễn phí COM (C++)
Tôi nhận được thông báo (... gần như mong đợi ...) "Lớp chưa đăng ký" khi tôi cố gắng tạo một đối tượng của đối tượng COM của tôi từ ứng dụng khách của tôi.
Tôi đã thành công loại cấu hình đó trước đây nhưng tôi không thể tìm ra lý do tại sao cấu hình này không thành công.
dưới đây là một vài chi tiết:
- các module Tôi có:
- một khách hàng MFC mà phụ thuộc vào 2 máy chủ COM (dll1.dll và dll2.dll)
- máy chủ COM dll1.dll phụ thuộc vào dll2.dll
- dll2.dll không phụ thuộc COM
các đối tượng COM tôi có:
- trong dll1.dll (ngôn ngữ .idl)
-
[
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;
};
-
- trong dll2. 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;
};
-
- cuộc gọi của khách hàng
-
IDialogManagerPtr dialogManager;
dialogManager.CreateInstance(CLSID_DialogManager); // <<< returns "Class not registered"
-
0.123.- các 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>
-
Tôi không có lỗi trong quá trình SxS hệ bối cảnh kích hoạt: - không có lỗi trong nhật ký cửa sổ (có nghĩa là cú pháp tệp kê khai của tôi là chính xác) - không phát hiện lỗi nào sxstrace (nhật ký kết thúc bằng "INFO: Tạo ngữ cảnh kích hoạt thành công."Thông điệp và không chứa lỗi hoặc thông điệp sucpicious; hơn nữa, tôi thấy rằng biểu hiện của tôi được nạp một cách chính xác)
Bất kỳ ý tưởng
là có một cách để gỡ lỗi SxS sâu hơn rằng với sxstrace nhận được danh sách các thực sự đã đăng ký? com hoặc các lớp học clr ví dụ ???
Cảm ơn bạn bởi trước
Bạn đang triển khai giao diện kép? – wqw
Tôi đã chỉnh sửa bài đăng của mình để thêm định nghĩa idl đầy đủ của IDialogManager, ICadWizardsManager và ICadWizard; đó là các giao diện mà tôi thực hiện – loic