从非托管 C++ mfc active x dll 启动 C# 对话框
Posted
技术标签:
【中文标题】从非托管 C++ mfc active x dll 启动 C# 对话框【英文标题】:Launching a C# dialog from an unmanaged C++ mfc active x dll 【发布时间】:2009-03-03 12:49:43 【问题描述】:有人告诉我用 C# 编写一个对话框,该对话框必须从非托管 c++ dll 实例化。我们在代码的其他地方执行此操作,只需将托管 c++ 类添加到 C++ 项目,然后从托管 c++ 类调用 C# dll。但是,我发现从我必须这样做的地方对我不起作用。我认为因为 c++ dll 是一个 MFCActiveX 项目。一旦我在此项目中的任何文件上设置了 clr,它将不再正确注册。当我尝试注册它时,我收到三个错误,然后是它注册的消息。但是,当我尝试使用它时,我得到一个 0x80040111“ClassFactory 无法提供请求的类”错误。 如果有人知道这里的问题是什么,我将不胜感激。我要么需要能够完成这个(首选),要么证明这是不可能的。
谢谢
【问题讨论】:
【参考方案1】:我看不出 MFCActiveX 项目如何阻止您以这种方式创建 C# 类。除非它根本不允许添加托管类。
如果您无法使用托管 C++ 类技巧,另一种选择是使用 COM。可以在 C# 项目中将各种工厂注册为 COM 对象。说给它下面的接口
[ComVisible(true)]
[Guid("babe87fc-1467-4913-a1d3-47eeedf1afb5")]
public interface IDialogFactory
void Create();
您还必须创建一个支持类。但是您可以注册托管程序集并使用 COM 访问它。
【讨论】:
谢谢,我现在使用该方法可以正常工作。非常有帮助,谢谢。【参考方案2】:您现在必须使用“regasm”而不是“regsvr32”注册它。
【讨论】:
以上是关于从非托管 C++ mfc active x dll 启动 C# 对话框的主要内容,如果未能解决你的问题,请参考以下文章