从C#调用DLL方法时,我需要将三个C ++结构作为参数发送。 我将它们简化为以下内容:
typedef struct
{
int data1;
int data2;
} A;
typedef struct
{
int numStructA;
A *pStructA;
int moreData;
} B;
typedef struct
{
TCHAR *pStr;
B structB;
} C;
以下是我需要从C#调用的C ++函数:
int func(C *pStructC, int numStructC);
在我的C#代码中,我将结构定义如下:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct A
{
public int data1;
public int data2;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct B
{
public int numStuctA;
public IntPtr structA;
public int moreData;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct C
{
[MarshalAs(UnmanagedType.LPTStr)]
public string Str;
[MarshalAs(UnmanagedType.Struct)]
public B structB;
}
[DllImport("somedll.dll")]
private static extern int func(IntPtr pStructC, int size);
我试图封装嵌套结构。但是,C ++函数无法正确接收数据。到目前为止,只有嵌套结构之前的数据才能正确发送到C ++函数。 如何编组嵌套结构以便C ++方法接收正确的数据?提前谢谢。