C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 150 を表示中)
■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 の実装がこうなっている以上は諦められた方が早いかと思います。

返信 編集キー/


管理者用

- Child Tree -