在C#中仅启用COM类的早期绑定

时间:2012-10-10 06:58:26

标签: c# vba com

我正在使用将从VBA使用的C#创建类库。但是有一件事让我觉得 - 当我删除或更改方法名称中的一些字母并尝试编译vba项目时,我没有得到任何错误。但我想得到编译错误消息如果我发现它发生因为使用后期绑定。

我会尝试解释。

  1. 这是正确的签名:

    Sub Test()
      Dim cls as New SomeClass
      cls.SomeMethod
    End Sub
    
  2. 这是拼写错误的签名:

    Sub Test()
      Dim cls as New SomeClass
      cls.**SomeMetod**
    End Sub
    
  3. 按编译VBA项目 - 一切正常,但不应该。

  4. 我已经更改了基本界面,如下所示:

    [Guid("Some GUID here"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IComInterface
    {}
    

    和基类:

    [ClassInterface(ClassInterfaceType.None)]
    public class BaseClass
    

    但没有任何反应!我只是在运行时遇到错误。

1 个答案:

答案 0 :(得分:1)

解决方案是:

    [Guid("Some GUID here"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IComInterface
    {}

和基类:

    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class BaseClass

请注意,不支持对代码进行版本控制!此外,诸如ToString(),GetHashCode()等.NET方法在VBA中变得可见。因此,您需要为这些方法使用属性[ComVisible(false)]。这适用于ToString,GetHashCode,Equals。在这种情况下,GetType无法隐藏。因此,您需要决定是否需要隐藏.NET方法或具有早期绑定和编译警告