2010-06-28 78 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