从非托管 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# 对话框的主要内容,如果未能解决你的问题,请参考以下文章

从非托管 C++ 配置 .NET 库

将非托管 C++ dll 添加到托管 C++ dll

如何将数据从非托管应用程序传递到 C# COM DLL

如何从非托管 C++ 代码获取结构化列表值到 C#?

从 C# 调用非托管 C++ VS 6.0 MFC dll

托管和非托管 C++/MFC 可以混合在一个 dll 中吗?