< Socket サンプル | ログクラス >

December 26, 2005

.NET の属性を使用して、Enum と Struct をタイプライブラリに含める方法

.NET で ATL を使用して COM DLL を作成しようとして・・・唖然としました。VC++ 6.0 で ATL COM ウィザード使ってたときと全く生成されるコードが違う・・・。一番の大きな違いは「属性」なるものが追加されたこと。宣言の前に大カッコでくくって指定するようです。

なんとか COM DLL を作り上げて、実装担当者に渡したところ、enum や struct をタイプライブラリにどうやって含めたのか聞かれました。これは私もドキュメントが見つけられず、試行錯誤ののち実装したもの。一応、以下のようにするとできますが、この方法で正しいのかわからない部分です。

#ifndef __EXPORTS__H
#define __EXPORTS__H

[
    export,         // タイプライブラリにエクスポートします
    v1_enum,        // 32bit 値の列挙型としてコンパイルします
    library_block,  // タイプライブラリの library ブロック内に配置します
    helpstring ("この enum は、タイプライブラリに含まれます。"),
]
enum ExportEnum
{
    nExportEnumValue1,
    nExportEnumValue2,
    nExportEnumValue3,
};

[
    export,         // タイプライブラリにエクスポートします
    library_block,  // タイプライブラリの library ブロック内に配置します
]
struct EXPORT_STRUCT
{
    long            nExportStructMember1;
    BYTE            ExportStructMember2 [10];
    VARIANT_BOOL    bExportStructMember3;
    BSTR            bstrExportStructMember4;
};


#endif  //__EXPORTS__H

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/1219

コメント

どうもはじめまして。まったく同じようにenumをタイプライブラリに含める方法で長いこと悩んでいたので、うれしいのでお邪魔します。

結構前に見つけてらしたんですねぇ。

ちなみに、[export, library_block]の2つの属性を付加すると、ちゃんとタイプライブラリに入りました。

>うえすぎさん
はじめまして!コメントありがとうございます。
本当にMSのドキュメントは必要な情報にたどり着くのに苦労しますよね。
特に.NET以降、新旧入り交じってるし、誤った情報もも多いですし・・・。

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?