C#调用COM组件时的结构类型数据封送问题,报PInvoke 签名错误
Com 的idl
[id(4), helpstring("method StructureTest")] HRESULT StructureTest(MyPoint a);
结构申明
typedef struct Point
{
int x;
int y;
}MyPoint;
C#中 结构包装,函数包装
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct Point
{
[MarshalAs(UnmanagedType.I4)]
public int x;
[MarshalAs(UnmanagedType.I4)]
public int y;
}
public class TestStructureDll
{
[DllImport("DataTypeTest2.dll",CallingConvention=CallingConvention.StdCall,EntryPoint="StructureTest")]
public static extern void StructureTest2([In,MarshalAs(UnmanagedType.Struct)]Point a);
}
函数调用
Point a = new Point();
a.x = 1;
a.y = 2;
int x=1;
int y=2;
TestStructureDll.StructureTest2(a);
就出现错误 对 PInvoke 函数“CApp_DllTest!CApp_DllTest.TestStructureDll::StructureTest2”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
我看了很久,没明白哪里错了,请高手指点~ 看过Knight94(愚翁)回答的两个问题,我也没弄好~ 谢谢!(高分相送)