1

我正在使用将在 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 项目 - 一切正常,但不应该。

我更改了基本界面,如下所示:

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

和基类:

[ClassInterface(ClassInterfaceType.None)]
public class BaseClass

但是什么也没有发生!!!我只在运行时出错。

4

1 回答 1

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 方法或有早期绑定和编译警告

于 2012-10-12T10:07:01.637 回答