在c#中编写一个com控件并在MFC中使用它

时间:2009-09-14 23:07:52

标签: c# com mfc activex

如果可以在C#中编写com控件或activex并在MFC中使用它?

2 个答案:

答案 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