2011-07-15 9 views
2

私はDelphiのCOMライブラリの一部を.netアセンブリに置き換えています。私はいくつかのCOMインターフェイスとenumを.netアセンブリに移動しました。列挙型が{enum_type_name} _ {enum_value_name}命名規則を使用して型ライブラリにエクスポートされる点を除いて、すべてが問題ありません。属性を使用してCOM列挙型フィールド名を指定することはできますか?

[ComVisible(true)] 
[Guid("318f9e87-444c-11d5-aed1-00105a758da4")] 
public enum KeyIDEnum 
{ 
    keLeft = 0, 
    keCentre = 1, 
    keRight = 2 
} 

は、私は、このデフォルトの動作をオーバーライドして、おそらく属性を使用して、列挙型の値の名前を指定する方法があるかどうかを知りたい

[ 
    uuid(318F9E87-444C-11D5-AED1-00105A758DA4), 
    version(1.0) 
] 
typedef enum tagKeyIDEnum 
{ 
    KeyIDEnum_keLeft = 0, 
    KeyIDEnum_keCentre = 1, 
    KeyIDEnum_keRight = 2 
} KeyIDEnum; 

になります。何かのように:

[ComVisible(true)] 
[Guid("318f9e87-444c-11d5-aed1-00105a758da4")] 
public enum KeyIDEnum 
{ 
    [Name("keLeft")] 
    keLeft = 0, 
    [Name("keCentre")] 
    keCentre = 1, 
    [Name("keRight")] 
    keRight = 2 
} 

私はほとんどこれが私はちょうど使用する属性クラスを知る必要がある方法があると確信しています。

+0

いいえ、オプションではありません。コピーを.idlファイルに貼り付け、名前を制御したい場合はmidl.exeでコンパイルします。または、既に持っているタイプライブラリを使用してください。 –

答えて

2

要するに、私はそれができると信じていますが、それは容易ではありません。私はほとんどの属性は、プレフィックスについてはtype conversion talksのエクスポートされたMSDNページとしてトリックを行いませんが、関連する属性は言及していません(ページの他の部分とは異なります)。 System.Runtime.InteropServices(COM関連の属性が存在する)のクラスのリストには、有望に見える属性もありません。

最後に、Mauricio Rojasのblog postは、IDLを変更することでそれを行う方法を説明していますが、それは醜いようです。 (他のいくつかのブログにも同様の記述があります)

関連する問題