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 に記述がある。
また、同様のことは各所に情報が存在している。
- http://hongliang.seesaa.net/article/15039496.html
- http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2499&forum=7
- http://www.atmarkit.co.jp/fdotnet/dotnettips/026w32struct/w32struct.html
など。