C#Com Enum和VB6

时间:2011-09-14 13:00:45

标签: c# com vb6 enums com-interop

您好我创建了C#Exe Com Server并从VB6应用程序中引用它。 问题是所有的枚举都在vb app中以“奇怪的名字”暴露:EnumName_EnumeItem,而从VB6代码转换为EnumName.EnumItem。

无法修改VB6应用程序代码。 想知道我能看到我可以通过改变tlb的idl提取来改变这个定义,但是不能确切地理解它是如何完成的,以及这项工作的工具是什么。

有关如何轻松设置枚举的任何建议吗?

代码:

 public enum enResultCode : uint
{
    enRCNone = 0x00000000,
    enRCNotFound = 0x00000001,
    enRCFoundOnServer = 0x00000002,
    enRCFoundOnLocal = 0x00000003,
    enRCDatabaseError = 0x00000004,
    enRCAborted = 0xFFFFFFFF,
    enRCServerError = 0xFFFFFFFE,
    enRCLocalError = 0xFFFFFFFD
}

在VB6中显示为:

enter image description here

而不是:

enResultCode.EnumItemName

1 个答案:

答案 0 :(得分:2)

我认为你是对的,唯一的办法是自己修改IDL。我可以告诉你一些关于它是如何完成的......

  1. 您运行tlbexp.exe以从C#程序集创建tlb。
  2. 您运行oleview.exe以打开该tlb并检查IDL。您可以将该IDL保存到文件中或复制/粘贴它。
  3. 您编辑IDL以为其提供所需的枚举项目名称。
  4. 您运行midl.exe以从修改后的IDL生成tlb。
  5. 那应该够了。抱歉,我不能给你所有正确的命令行开关,但我现在不在Windows机器上。