1

有人告诉我用 C# 编写一个对话框,该对话框必须从非托管 c++ dll 实例化。我们在代码的其他地方执行此操作,只需将托管 c++ 类添加到 C++ 项目,然后从托管 c++ 类调用 C# dll。但是,我发现从我必须这样做的地方对我不起作用。我认为因为 c++ dll 是一个 MFCActiveX 项目。一旦我在此项目中的任何文件上设置了 clr,它将不再正确注册。当我尝试注册它时,我收到三个错误,然后是它注册的消息。但是,当我尝试使用它时,我得到一个 0x80040111“ClassFactory 无法提供请求的类”错误。如果有人知道这里的问题是什么,我将不胜感激。我要么需要能够完成这个(首选),要么证明这是不可能的。

谢谢

4

2 回答 2

0

您现在必须使用“regasm”而不是“regsvr32”注册它。

于 2009-03-03T13:20:00.433 回答
0

我看不出 MFCActiveX 项目如何阻止您以这种方式创建 C# 类。除非它根本不允许添加托管类。

如果您无法使托管 C++ 类技巧发挥作用,另一种选择是使用 COM。可以在 C# 项目中将各种工厂注册为 COM 对象。说给它下面的界面

[ComVisible(true)]
[Guid("babe87fc-1467-4913-a1d3-47eeedf1afb5")]
public interface IDialogFactory {
  void Create(); 
}

您还必须创建一个支持类。但是您可以注册托管程序集并使用 COM 访问它。

于 2009-03-03T13:22:15.420 回答