我疯了,原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配

麦壳饼 2010-11-03 07:39:26
我疯了
对 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();


...全文
2349 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
投投 2012-06-01
  • 打赏
  • 举报
回复
xvxcvcvxcv
li45214521 2010-11-03
  • 打赏
  • 举报
回复
[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)]

试试
兔子-顾问 2010-11-03
  • 打赏
  • 举报
回复
要多贴一点。而且你说奇数次错误,那1,3次是出错的,你出错后如何做的,忽略异常继续?
zhhui_778899 2010-11-03
  • 打赏
  • 举报
回复
抢个沙发,希望高手来帮忙

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧