我被告知在C#中编写一个对话框,必须从非托管的c ++ dll中实例化。我们通过在C ++项目中添加托管c ++类,然后从托管c ++类调用C#dll,在代码中的其他位置执行此操作。但是我发现这对我来说不起作用。我认为因为c ++ dll是一个MFCActiveX项目。一旦我将clr设置在此项目中的任何文件上,它将不再正确注册。当我尝试注册它时,我得到三个错误,然后是它注册的消息。但是当我尝试使用它时,我得到一个0x80040111“ClassFactory无法提供请求的类”错误。 如果有人知道这里的问题是什么,我将非常感激。我要么必须能够完成这个(首选),要么证明这是不可能的。
由于
答案 0 :(得分:0)
您现在必须使用“regasm”而不是“regsvr32”进行注册。
答案 1 :(得分:0)
我无法看到MFCActiveX项目如何阻止您以这种方式创建C#类。除非它只是不允许添加托管类。
如果无法使托管C ++类技巧起作用,另一种选择是使用COM。可以在C#项目中将一个类别的工厂注册为COM对象。说给它以下界面
[ComVisible(true)]
[Guid("babe87fc-1467-4913-a1d3-47eeedf1afb5")]
public interface IDialogFactory {
void Create();
}
您还必须创建一个支持类。但是,您可以注册托管程序集并使用COM访问它。