Delphi GenTLB为什么要重命名符号(附加“\ux”)

Delphi GenTLB为什么要重命名符号(附加“\ux”),delphi,delphi-2009,Delphi,Delphi 2009,我正在使用GenTLB.exe将ridl文件编译为.tlb和_tlb.pas文件 在生成的_TLB.pas文件中,有提示表明它已通过在名称末尾添加下划线重命名了许多符号 提示示例如下: // Errors: // Hint: Symbol 'Assign' renamed to 'Assign_' // Hint: Enum Member '_amStretch' of 'EnumVRSAppliedMaterial' changed to '_amStretch_' // Hint

我正在使用GenTLB.exe将ridl文件编译为.tlb和_tlb.pas文件

在生成的_TLB.pas文件中,有提示表明它已通过在名称末尾添加下划线重命名了许多符号

提示示例如下:

// Errors:
//   Hint: Symbol 'Assign' renamed to 'Assign_'
//   Hint: Enum Member '_amStretch' of 'EnumVRSAppliedMaterial' changed to '_amStretch_'
//   Hint: Enum Member '_amTile' of 'EnumVRSAppliedMaterial' changed to '_amTile_'
我在GenTLB中使用的命令行是:

GenTLB -P -Pt+ <ridl file>

如果我同时使用tlibimp工具,我也会遇到同样的问题。

我不确定,但如果名称与现有名称冲突,例如重新排列的单词等,则通常会在名称前添加下划线。
可能是这样。

Assign被重命名为Assign_uu,因为tlibimp.sym中有一个映射,它是与tlibimp位于同一目录中的INI格式文本文件


另一个逻辑段不断地追加“u”,直到找到与先前全局名称tlibimp唯一的名称为止。所有枚举成员都被解释为全局成员。生成的.pas文件中是否还有其他_amTile等实例?

谢谢。分配重命名是一个令人讨厌的小陷阱-我必须决定如何最好地避免它。是的,在生成的.pas文件中还有另一个_amTile实例-看起来我犯了在生成ridl代码时加倍处理某些内容的错误:-