我有一个相当奇怪的问题。 我正在从C#库导出一个接口到COM。 我已启用'注册COM'项目设置,因此它调用tlbexp.exe来创建类型库。
我们在方法名称上使用驼峰大小写,并且我注意到导出的类型库将这些碰巧与类名称重合的方法更改为Pascal大小写...
e.g
interface IFoo
{
void randomClass()
}
class RandomClass
{
}
lib类型中导出的IFoo定义了IFoo-> RandomClass()而不是IFoo-> randomClass()
关于导致这种情况的原因以及如何阻止它的任何想法?
答案 0 :(得分:6)
由于COM不区分大小写,因此“RandomClass”和“randomClass”在输出库的表中都是相同的符号。 (这是.NET指南推荐PascalCasing用于类名和方法的部分原因。)
被选中的那个将是编译器发出的第一个,从程序员的角度来看,这是非常不确定的!
您可以使用tlbexp的/names
参数选择其中一个,但两个外壳不能共存于库中。
要使用tlbexp的名称文件,您只需创建一个带有标识符列表的文件,每行一个:
RandomClass
SomeOtherIdentifier
然后你这样称呼它:
tlbexp MyAssembly.dll /names=MyNames.txt
然后,tlbexp将使用名称文件中定义的符号版本。