如果可以在C#中编写com控件或activex并在MFC中使用它?
答案 0 :(得分:3)
是。首先,您需要创建COM对象。下面是一个非常简单的例子。
[Guid("123565C4-C5FA-4512-A560-1D47F9FDFA20")]
public interface IDoSomething
{
[DispId(1)]
string Name { get; }
[DispId(2)]
int DoSomething();
}
[ComVisible(true)]
[Guid("12AC8095-BD27-4de8-A30B-991940666927")]
[ClassInterface(ClassInterfaceType.None)]
public sealed class DoSomething: IDoSomething
{
public DoSomething()
{
}
public string Name
{
get { return ""; }
}
public int DoSomething()
{
return 4; //random number
}
}
之后你需要重新装配你的装配。 regasm工具将添加必要的注册表COM条目:
regasm.exe /tlb component.dll
/ tlb是生成要在MFC应用程序中导入的类型库所必需的。
注册程序集后,可以像调用任何其他COM对象一样在MFC应用程序中调用DoSomething。
查看此link以获取更多信息。
答案 1 :(得分:0)
这有点超出我的正常范围,因为我没有那么多与.NET Interop技术交互。
可以在C#控件/类周围创建所谓的COM Callable Wrapper,以使任何支持COM的程序都可以访问它。我不会复制弗朗西斯B的答案,因为它现在相当完整。
最大的问题是可视化C#控件是否可以在MFC窗口中无缝工作。这不是我能回答的问题,但我最好的建议是为前方的坎坷路做准备。有关详细信息,请参阅http://bytes.com/topic/net/answers/430618-c-control-mfc-window-frame。