我有一个C++中定义的结构,它包含int和std :: string数组,它是一个本地C++代码(dll)。我用下面的方法得到它在C#中:C#中的C++ struct Marshall数组结构
public class PInvokeData
{
[StructLayout(LayoutKind.Sequential)]
public struct pinvoke_call
{
//[MarshalAs(UnmanagedType.LPArray,SizeConst=5,SizeParamIndex=0,MarshalType="int")]
[MarshalAs(UnmanagedType.ByValArray, SizeConst=5)]//,SizeParamIndex =0,SafeArraySubType = VarEnum.VT_I4)]
public int[] mynum;
}
[DllImport("DLL_pinvoke_base.dll")]
public extern static pinvoke_call TestPInvoke();
}
代码编译得很好。 当我把这种静态方法和C++获得结构的返回值,并分配给另一个结构对象在C#一样
input = PInvokeData.TestPInvoke();
我得到MarshalDirectiveException的异常被unhandeled。方法的类型签名不是PInvoke兼容的。我试图通过其他论坛主题解决问题,但我没有得到结果。
在C结构++如图那里C#结构等
struct pinvoke_call
{
int mynum[5]
};
调用函数C++,它返回这个结构变量从那里到C#,我想编组
感谢后代码是相同回复, Ashutosh
您忘记向我们展示C++代码,您声明结构。 – 2011-03-09 06:43:50
C++代码中的结构与C#结构中显示的相同,如struct pinvoke_call {int mynum [5]};在调用一个函数C++之后,它从那里返回这个结构变量给我想编组的C# – Ashutosh 2011-03-09 06:58:40