我有两个C++结构,我必须从C#调用DLL方法时作为参数发送。MarshalAs嵌套结构
例如,让我们将它们定义为:
struct A
{
int data;
}
struct B
{
int MoreData;
A * SomeData;
}
,我需要从C#调用具有以下签名的方法:
int operation (B * data);
(请注意,我没有控制在这些C++结构或方法上)。
在C#中,我将这些结构定义为类:
[StructLayout(LayoutKind.Sequential)]
class A
{
public int data;
}
[StructLayout(LayoutKind.Sequential)]
class B
{
public int MoreData;
[MarshalAs(UnmanagedType.Struct)]
public A SomeData;
}
我已经创建了一个“调试dll”从C#调用,以确保在C++方法中正确接收所有数据。到目前为止,只有在嵌套结构指针之前发送的数据才能正确发送。
当我尝试从嵌套结构(B-> A->数据)读取数据时,出现读取违例错误(AccessViolationException)。
如何编组嵌套结构以便我可以在C++方法中读取它?
这来得太迟了,刚完成自己的封送。不过,这是正确的答案。不管怎样,谢谢你! – 2010-10-12 14:44:08