tlbexp.exe更改方法名称的大小写

时间:2010-06-28 05:37:02

标签: c# com interop typelib tlbexp

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

我们在方法名称上使用驼峰大小写,并且我注意到导出的类型库将这些碰巧与类名称重合的方法更改为Pascal大小写...

e.g

interface IFoo
{
void randomClass()
}

class RandomClass
{
}

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

关于导致这种情况的原因以及如何阻止它的任何想法?

1 个答案:

答案 0 :(得分:6)

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

被选中的那个将是编译器发出的第一个,从程序员的角度来看,这是非常不确定的!

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

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

RandomClass
SomeOtherIdentifier

然后你这样称呼它:

tlbexp MyAssembly.dll /names=MyNames.txt
然后,

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