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

ljb*_*ade 5 c# com interop tlbexp typelib

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

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

例如

interface IFoo
{
void randomClass()
}

class RandomClass
{
}
Run Code Online (Sandbox Code Playgroud)

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

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

por*_*ges 6

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

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

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

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

RandomClass
SomeOtherIdentifier
Run Code Online (Sandbox Code Playgroud)

然后你这样称呼它:

tlbexp MyAssembly.dll /names=MyNames.txt
Run Code Online (Sandbox Code Playgroud)

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