有一个vb的api接口如下,
ublic Type Params
    port As String * 3
    CtrlID As String * 3
    Params As String * 1024
    iPort As String * 4
    IP As String * 15
End Type
Public Declare Function OpenComm Lib "CM60.DLL" (ByRef lParam As Params, ByVal sType As Integer) As Integer
我改成C#下的接口如下:
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        private struct Param
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)]
            public string Port;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)]
            public string CtrlID;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
            public string Params;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
            public string IPPort;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)]
            public string IPAddr;
        }
        private int sType = 401;
        [DllImport("CM60.dll")]
        private static extern int OpenComm(ref Param par,int stype);
改好后,调用时一直报错,请各位帮忙看一下,错误如下:对 PInvoke 函数“XJFroms!XJFroms.Vegetable.Veg_exit::OpenComm”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。API