日期:2014-05-18  浏览次数:20931 次

我疯了,原因可能是托管的 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)]

试试