| ■87195 / ) |
Re[1]: 固定長配列を含む構造体のマーシャリング |
□投稿者/ Azulean (947回)-(2018/04/21(Sat) 19:33:43)
|
■No87194 (mbox さん) に返信
> fixed配列ではなく、普通の配列にしてMarshalAs属性を付けるとか、
> bを消すとかすると正しくマーシャリングされるのですが、
> fixed配列のまま、正しくマーシャリングするにはどうすればよいのでしょうか?
できないのでは?という印象を持っています。
コンパイルしてできたバイナリを IL 逆アセンブラーに処理させると、フィールド a に対する特殊な構造体ができていることを確認できると思います。
C# コードに書き直した際のイメージとしては以下のような感じです。
(実際にはいくつか属性がついています)
struct F
{
[StructLayout(LayoutKind.Sequential, Size=2)]
sturct <a>__FixedBuffer
{
public byte FixedElementField;
}
public <a>__FixedBuffer a;
public string b;
}
ただ、PtrToStructure だと、その FixedElementField の位置に値を設定するものの、残りのバイトは構造体にフィールドがないので無視されるようです。
fixed の実装と、PtrToStructure の実装がこうなっている以上は諦められた方が早いかと思います。
|
|