C# Com 枚举和 VB6

标签 c# com vb6 enums com-interop

您好,我创建了 C# Exe Com Server 并从 VB6 应用程序引用它。 问题是所有枚举在 vb 应用程序中都以“奇怪的名称”公开: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

最佳答案

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

  1. 运行 tlbexp.exe 从 C# 程序集创建 tlb。
  2. 您运行 oleview.exe 打开那个 tlb 并检查 IDL。您可以将该 IDL 保存到文件或复制/粘贴它。
  3. 您编辑 IDL 以赋予它所需的枚举项名称。
  4. 运行 midl.exe 以从修改后的 IDL 生成 tlb。

这应该够了。抱歉,我无法为您提供所有正确的命令行开关,但我现在不在 Windows 计算机上。

关于C# Com 枚举和 VB6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7416720/

相关文章:

c++ - 在 MMC 管理单元中嵌入 MFC 对话框

c++ - 我在哪里可以看到 ATLTRACE 输出?

visual-studio - 为 COM 互操作注册 x64 程序集

vb6 - 如何从函数返回值

unit-testing - Visual Basic 6 和单元测试

c# - 用于解析由括号分隔的数据的正则表达式

StringBuilder 的 C# String.Substring 等价物?

c# - 从 SQL Server 数据库中获取数据到标签中

c# - 什么是界面鸭子类型?

windows - 如何捕获 Windows 消息?