来自VB6 DLL的枚举值不会出现在C#

时间:2015-06-11 12:01:40

标签: c# enums vb6 com-interop

我们有一个VB6 DLL,其中包含几个枚举定义。我们已经将VB6 DLL加载为C#项目中的引用。

在Visual Studio 2010对象浏览器中,所有VB6类都可见,枚举名称也是如此。但是,枚举未显示,并且在C#代码中使用intellisense时也未列出。然而,enum名称确实来自intellisense,我尝试过的所有类名和类方法,属性等也是如此。所以只有价值似乎被遗漏了。

如果我在代码窗口中单击枚举名称并选择Go To Definition,我会得到这样的结果:

namespace DLLName
{
    [Guid("3DD0C797-2BF0-4A7A-8E1E-83E3095CB3AE")]
    public enum EnumName
    {
    }
}

显示相同的内容 - 枚举存在且没有值。

所以问题是 - 枚举值在哪里,我们可以做些什么让它们出现?

注意 - 如有必要,我可以修改VB6 DLL。

由于

1 个答案:

答案 0 :(得分:0)

枚举值在VB6的值名称中有空格,这导致它们在C#中的枚举定义中被省略。

在VB6中,您可以使用特殊的方括号语法声明枚举值,这些值的名称中包含空格。例子:

Public Enum TestEnumNoSpaces
    EnumA
    EnumB
    EnumC
End Enum

Public Enum TestEnumWithSpaces
    [Enum A]
    [Enum B]
    [Enum C]
End Enum

如果将其编译为DLL并将其作为Visual Studio 2010中的引用加载,则在对象浏览器中,两个枚举都可见。但是,未显示枚举

我使用的DLL中的大多数枚举都有名称中带空格的枚举。这是一种常见的命名约定。但幸运的是,有一些没有使用这种格式,我注意到它们的值出现在C#中。