トップ回答者
C#からCPPのDLLを呼ぶときの、構造体の引数の渡し方

質問
-
CPP側--------------------------
typedef struct {
bool boA;
int iB;
char c1[256];
char c2[256];
double d1;
} STPart;
typedef struct {
STPart sPart[10];
} STMain;
void foo(STMain *sCPP)
{
sCPPにアドレス00000000(NULL)が渡ってきてしまうsCPP->sPart[0].c1[0] = 5;//当然エラー
}C#側--------------------------------------
[StructLayout(LayoutKind.Sequential, Pack = 4)]
private struct STPart {
[MarshalAs(UnmanagedType.I1)]
public bool boA;
public int iB;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public byte[] c1;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public byte[] c2;
public double d1;
}
[StructLayout(LayoutKind.Sequential, Pack = 4)]
private struct STMain {
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public STPart[] stPart;
}
[DllImport("DLL.dll", EntryPoint = "foo", SetLastError = false)]
private static extern int foo(ref STMain);
void fooCall()
{
STMain stM = new STMain();
int i;for(i=0;i<10;i++){
stM.stPart[i] = new STPart();
stM.stPart[i].boA = false;
stM.stPart[i].iB = 10;
stM.stPart[i].d1 = 9.9;
foo(ref stM);
}
}
以上のようなプログラムを作り、C#からCPP側の関数をコールするプログラムを作ったのですが、
CPP側の構造体にアドレスが渡されずNULLになってしまいます
そのため、渡した構造体の一部にデータを設定することが出来ずにいます
構造体の宣言の仕方に間違いがあるのでしょうか