读书人

小弟我疯了原因可能是托管的 PInvok

发布时间: 2012-06-02 14:16:14 作者: rapoo

我疯了,原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配
我疯了
对 PInvoke 函数“PMS.Common!PMS.Common.calc::CalcL”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

奇数次调用这个 出错,
偶数次正确。 奶奶的


[DllImport("calc.dll", CharSet = CharSet.Auto)]

public static extern int CalcL([MarshalAs(UnmanagedType.AnsiBStr)]string exps);
[DllImport("calc.dll", CharSet = CharSet.Auto)]

public static extern float CalcF([MarshalAs(UnmanagedType.AnsiBStr )]string exps);
[DllImport("calc.dll", CharSet = CharSet.Auto)]
public static extern int GetError();




[解决办法]
要多贴一点。而且你说奇数次错误,那1,3次是出错的,你出错后如何做的,忽略异常继续?
[解决办法]
[DllImport("calc.dll", CharSet = CharSet.Auto,CallingConvention.Cdecl)]
[DllImport("calc.dll", CharSet = CharSet.Auto,CallingConvention.FastCall)]
[DllImport("calc.dll", CharSet = CharSet.Auto,CallingConvention.ThisCall)]
[DllImport("calc.dll", CharSet = CharSet.Auto,CallingConvention.StdCall)]
[DllImport("calc.dll", CharSet = CharSet.Auto,CallingConvention.Winapi)]

试试

读书人网 >C#

热点推荐