5

私はかなり奇妙な問題を抱えています。インターフェイスをC#ライブラリからCOMにエクスポートしています。「COMで登録」プロジェクト設定を有効にしたので、tlbexp.exeを呼び出してタイプlibを作成します。

メソッド名にキャメルケースを使用していますが、エクスポートされたタイプライブラリによって、クラス名と一致するすべてのメソッドがPascalケースに変更されることに気付きました...

例えば

interface IFoo
{
void randomClass()
}

class RandomClass
{
}

タイプlibでエクスポートされたIFooは、IFoo-> randomClass()ではなくIFoo-> RandomClass()を定義します。

これを引き起こす原因とそれを止める方法についてのアイデアはありますか?

4

1 に答える 1

6

COMでは大文字と小文字が区別されないため、「RandomClass」と「randomClass」はどちらも出力ライブラリのテーブルで同じシンボルになります。(これは、.NETガイドラインがクラス名とメソッドにPascalCasingを推奨する理由の一部です。)

選択されるのはコンパイラーが最初に発行するものであり、これはプログラマーの観点からはかなり非決定的です。

tlbexpのパラメーターを使用してどちらかを選択できます/namesが、両方のケーシングをライブラリーに共存させることはできません。

tlbexpのnamesファイルを使用するには、1行に1つずつ、識別子のリストを含むファイルを作成するだけです。

RandomClass
SomeOtherIdentifier

それからあなたはそれをそのように呼びます:

tlbexp MyAssembly.dll /names=MyNames.txt

tlbexpは、namesファイルで定義されたシンボルのバージョンを使用します。

于 2010-06-28T06:15:50.117 に答える