次の c#/c コードがあり、C dll で処理を行っています。ピンボーク/マーシャルを黒魔術として使用して、DLL 内のものを動的に割り当て/解放できるようにしています。
このスニペットでは、double の配列を割り当て/使用/解放するために 2 つの異なる方法を使用していることがわかります。私の質問は、両方の呪文 (つまり、MarshalAs ステートメントを使用するかどうか) が正常に機能するため、「MarshalAs(UnmanagedType...」行は何をするのかということです?私は C の理解が不十分であり、さらに理解していないことを付け加える必要があります。私はC#のすべてを理解し、超対称量子力学を理解するだけでなく、ピンボーク/マーシャル全体を理解しています。
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class row
{
public int a;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
IntPtr[] b;
IntPtr [] c;
}
// c code
struct row
{
int a;
double *b;
double *c;
}
void fooe(void)
{
row.b[4] = (double *) malloc(54000);
row.c[4] = (double *) malloc(54000);
free(row.b[4]);
free(row.c[4]);
}