代码之家  ›  专栏  ›  技术社区  ›  Mr AH

在IDL中COM暴露的C++属性显示为“突然”的小写

  •  1
  • Mr AH  · 技术社区  · 15 年前

    我有这个旧的C++ COM组件。我取了最新的代码库,构建了它,发现其中一个属性的大小写变低了。例如,在预编译的dll中,我有一个属性“type”,但从源代码构建时,它被称为“type”。IDL显示该属性称为“类型”。那么这里可能发生什么呢?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Hans Passant    15 年前

    在摩擦了我的Crystal Ball一段时间后,它断定您正在使用.NET tlbimp.exe实用程序将类型库转换为.NET interop类。它有一个bug,如果类型库中有一个名称相同但大小写不同的符号,它会使标识符的大小写出错。类似于类型库中前面的方法声明,它采用名为“type”的参数。类型库其余部分中名为“type”的任何标识符都将转换为“type”。

    实用程序的改进版本是 available here .

        2
  •  4
  •   porges    15 年前

    COM不区分大小写,因此在库的符号表中只有一个符号条目。” type “。放入符号表中的版本是编译器遇到的第一个版本。

    微软 advice on the matter 简单地说:

    在引入新的标识符时,请确保IDL文件中不存在相同的名称。

    你应该坚持 Type 类型 在IDL中,以获得一致的结果。