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

Posted

技术标签:

【中文标题】用c#写一个com控件并在MFC中使用【英文标题】:write a com control in c# and use it in MFC 【发布时间】:2010-11-28 07:15:01 【问题描述】:

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

【问题讨论】:

【参考方案1】:

是的。首先,您需要创建 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 了解更多信息。

【讨论】:

【参考方案2】:

这有点超出我的正常范围,因为我与 .NET 互操作技术的交互并不多。

可以围绕 C# 控件/类创建所谓的 COM 可调用包装器,以使其可供任何支持 COM 的程序访问。我不会重复 Francis B 的答案,因为它目前相当完整。

最大的问题是可视化 C# 控件是否可以在 MFC 窗口中无缝工作。这不是我能回答的问题,但我最好的建议是为前方的崎岖道路做好准备。详情请见http://bytes.com/topic/net/answers/430618-c-control-mfc-window-frame。

【讨论】:

以上是关于用c#写一个com控件并在MFC中使用的主要内容,如果未能解决你的问题,请参考以下文章

来自 MFC 对话框中使用的托管 C# 用户控件的未处理异常

MFC 应用程序中的 C# 控件

MFC 控件的使用

MFC里对话框控件ccombox问题

VC++(MFC)中动态创建和管理按钮控件,怎么做?

像 C# 中的 MFC 通用控件插件?