DOBON.NET DOBON.NETプログラミング掲示板過去ログ

構造体の使用で

環境/言語:[C#2005]
分類:[.NET]

C#2005で開発しています。

[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct DT3
{
public short a3;
public short b3;
}

[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct DT2
{
public short a2;
public short b2;
}

[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct DT1
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=16)]
public DT2[] dt2;
public short a1;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=5)]
public DT3[] dt3;
}

[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct DT
{
public int a0;
public DT1 dt1;
}


static public DT dt;

private void test()
{
text1.Text = dt.a0; ... @
}

private void test()
{
text1.Text = dt.dt1.a1; ... A
}

private void test()
{
text1.Text = dt.dt1.dt2.a2; ... B
}

上記で、@、Aは問題なく参照できるのですが、Bの場合、
「オブジェクト参照がオブジェクトインスタンスに設定されていません」
となります。
どうすればいいのかご教授下さい。
■No21214に返信(さかいさんの記事)
> 上記で、(1)、(2) は問題なく参照できるのですが、(3) の場合、
> 「オブジェクト参照がオブジェクトインスタンスに設定されていません」
> となります。
> どうすればいいのかご教授下さい。

文字どおりインスタンスを生成してください。
  • 題名: Re[1]: 構造体の使用で
  • 著者: Azulean
  • 日時: 2008/01/11 0:12:30
  • ID: 21217
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No21214に返信(さかいさんの記事)
> [MarshalAs(UnmanagedType.ByValArray, SizeConst=16)]

MarshalAsのSizeConstはあくまでマーシャリングする際の目印であり、実際に要素数を指定して確保するものではありません。
(要するに今は属性の影響はなく、dt2にnullが入っている)
多分、ここを勘違いされているような気がします。
  • 題名: Re[1]: 構造体の使用で
  • 著者: さかい
  • 日時: 2008/01/11 9:36:41
  • ID: 21219
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
じゃんぬねっとさん、Azuleanさん、ありがとうございました。
無事、参照できました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板