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

由于

有帮助吗?

解决方案

我无法看到MFCActiveX项目如何阻止您以这种方式创建C#类。除非它只是不允许添加托管类。

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

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

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

其他提示

您现在必须将其注册为“regasm”而不是“regsvr32”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top