5

我有一个相当奇怪的问题。我正在将 C# 库中的接口导出到 COM。我启用了“向 COM 注册”项目设置,因此它调用 tlbexp.exe 来创建类型库。

我们在方法名称上使用驼峰式大小写,我注意到导出的类型库将这些恰好与类名一致的方法更改为 Pascal 大小写...

例如

interface IFoo
{
void randomClass()
}

class RandomClass
{
}

类型库中导出的 IFoo 定义了 IFoo->RandomClass() 而不是 IFoo->randomClass()

关于是什么原因以及如何阻止它的任何想法?

4

1 回答 1

6

由于 COM 不区分大小写,因此 "RandomClass" 和 "randomClass" 在输出库的表中是相同的符号。(这也是 .NET 指南推荐类名和方法使用 PascalCasing 的部分原因。)

被选择的将是编译器发出的第一个,从程序员的角度来看,这是相当不确定的!

您可以使用 tlbexp 的/names参数来选择其中一种,但两种外壳不能在库中共存。

要使用 tlbexp 的名称文件,您只需创建一个包含标识符列表的文件,每行一个:

RandomClass
SomeOtherIdentifier

然后你这样称呼它:

tlbexp MyAssembly.dll /names=MyNames.txt

然后 tlbexp 将使用名称文件中定义的符号版本。

于 2010-06-28T06:15:50.117 回答