我有以下 c#/c 代码,我在 C dll 中做事。我正在使用 pinvoke/marshal 作为黑魔法,它使我能够在 dll 中动态分配/释放东西,而 C# 代码不知道发生了什么不愉快的事情。
在这个片段中,您将看到我使用 2 种不同的方式来分配/使用/释放一个双精度数组。我的问题是,“MarshalAs(UnmanagedType...”行是做什么的,因为这两种咒语(即使用或不使用 MarshalAs 语句)都可以正常工作?我应该补充一点,我对 C 的理解很差,甚至更少理解的 C#,我了解整个 pinvoke/marshal 以及我了解超对称量子力学。
[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]);
}