将.net用户控件转换为COM组件

将.net用户控件转换为COM组件,com,user-controls,com-interop,Com,User Controls,Com Interop,我有一个工作的.net winform用户控件,希望将其转换为COM。我一直在努力寻找将此用户控件转换为启用COM的方法(用于VS6/C++6)。我不确定这是否可行?或者我必须考虑另一种方法?以下是界面: [ComVisible(true)] [InterfaceType(ComInterfaceType.InterfaceIsDual)] [Guid("C8BDB591-189D-4EB5-A026-7C9FFBEE3A85")] public interface iMainInterface

我有一个工作的.net winform用户控件,希望将其转换为COM。我一直在努力寻找将此用户控件转换为启用COM的方法(用于VS6/C++6)。我不确定这是否可行?或者我必须考虑另一种方法?以下是界面:

[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("C8BDB591-189D-4EB5-A026-7C9FFBEE3A85")]
public interface iMainInterface
{
    [DispId(1)]
    void ShowMyInterface();
}
下面是控制按钮:

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(iMainInterface))]
[Guid("F8D26781-5A97-4467-B732-7EAB1A04C3F2")]
public partial class MainInterface : UserControl
{
    public void ShowMyInterface()
    {
       ...
    }
 }
错误消息似乎是针对[ComSourceInterfaces(typeof(iMainInterface))]

以下是错误:
错误2无法注册程序集“MyInterface.dll”。类型“xxx.MainInterface”不支持指定的默认COM接口:“xxx.iMainInterface”PerformReportControl应仅用于生成事件的接口。看起来iMainInterface没有任何事件,所以只需删除该属性即可

您忘了让类继承接口。修正:

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("F8D26781-5A97-4467-B732-7EAB1A04C3F2")]
public partial class MainInterface : UserControl, iMainInterface
{
    public void ShowMyInterface()
    {
       ...
    }
 }

对于接口类型,请使用大写字母I(而不是I)。

谢谢。有时第二双眼睛对我帮助很大