pinvoke を使用して、別の構造内の構造の配列を C から C# にマーシャリングしようとしています。私の知る限り、できません。
代わりに、C 構造体で配列への ptr と malloc を宣言します。問題: 1) C# 側で同等のものを宣言するにはどうすればよいですか? 2) C# 側で同等のものを割り当てて使用するにはどうすればよいですか?
//The C code
typedef struct {
int a;
int b; } A;
typedef struct {
int c;
// A myStruct[100]; // can't do this, so:
A *myStruct; } B;
//The c# code:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class A{
int a;
int b;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class B{
int c;
// can't declare array of [100] A structures...
?
}
[編集]: どういうわけか、c# 側のオブジェクトの固定配列について他の場所で読んだことを誤解しました。そして、Cで配列サイズを修正できますので、コンパイルはOKですが、次を使用すると「オブジェクト参照がオブジェクトのインスタンスに設定されていません」と表示されます。
data.B[3].a = 4567;
したがって、このエラーが何であるかについて他の場所で読んで、次のメソッドを追加しました。
public void initA()
{
for (int i = 0; i < 100; i++) { B[i] = new A(); }
}
再度、コンパイルはOKですが、同じエラー メッセージが表示されます。