2010-06-28 45 views
5

我有一个相当奇怪的问题。 我正在将一个接口从C#库导出到COM。 我已经启用了“注册COM”项目设置,因此它调用tlbexp.exe来创建类型库。tlbexp.exe更改方法名称的案例

我们对我们的方法名使用骆驼情况下,我注意到的是,导出的类型库这些变化恰好与类名Pascal大小写一致的任何方法...

interface IFoo 
{ 
void randomClass() 
} 

class RandomClass 
{ 
} 

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

对于什么导致这种情况以及如何阻止它的任何想法?

回答

6

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

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

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

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

RandomClass 
SomeOtherIdentifier 

然后调用它像这样:然后

tlbexp MyAssembly.dll /names=MyNames.txt 

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

+0

谢谢!我从来不知道这一点。 – ljbade 2010-08-06 02:53:22

+0

有什么办法可以在/ tlb时使用Regasm来使用/名称? – Squirrel 2010-10-04 17:14:33

+0

@Squirrel:不是我所知道的。 – porges 2011-03-06 20:47:25