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()
关于是什么原因以及如何阻止它的任何想法?
由于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将使用名称文件中定义的符号版本.