.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