我们有一个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。
由于
答案 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#中。