misc.log

日常茶飯事とお仕事と

共用体を.NETで

C用のライブラリをVB.NETから使う必要があり、調べていたのだが、C側の定義に共用体があるためにうまくいかず、困っている。

共用体に対応する概念は.NETには存在しないのだが、構造体の宣言にStructLayout.Explicitを指定し、各メンバーにFieldOffset属性で開始位置をバイト指定することで、共用体同様の挙動をさせることは可能らしい。

ただ、その中にString型などが混じっているとどうもだめなようだ。

実際、http://msdn.microsoft.com/library/shared/deeptree/asp/rightframe.asp?dtcfg=/library/deeptreeconfig.xml&url=/library/en-us/cpguide/html/cpconunionssample.asp?frame=true&hidetoc=false に記述がある。
また、同様のことは各所に情報が存在している。

など。