C#调用C++生成的DLL时,托管的 PInvoke 签名与非托管的目标签名不匹配

椰果子 2011-04-29 10:48:01
对 PInvoke 函数“Techstar.TheRemoteECGSystem.FormView!Techstar.TheRemoteECGSystem.FormView.frmCheck::Analyze”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

C++里:
extern "C" __declspec(dllexport) bool Analyze(char *path)


C#里:
[DllImport("FileAnalyze.dll",CharSet=CharSet.Ansi)]
public static extern bool Analyze(string path);

private void btnOpen_Click(object sender, EventArgs e)
{
if(Analyze(cPath))
MessageBox.Show("Done");
}

我看网上说是参数类型不对,怎么改才对
...全文
611 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gfenghappy 2011-06-04
  • 打赏
  • 举报
回复
改 [DllImport("winmm.dll", EntryPoint = "sndPlaySoundA",)]
为[DllImport("winmm.dll", EntryPoint = "sndPlaySoundA", CallingConvention = CallingConvention.Cdecl)]试一下
bdmh 2011-04-29
  • 打赏
  • 举报
回复
c++默认是cdecl的,好像C#只能调用stdcall的dll
mjp1234airen4385 2011-04-29
  • 打赏
  • 举报
回复
正想说这方面的原因。
你的帖子就变成了一个接分帖。
椰果子 2011-04-29
  • 打赏
  • 举报
回复
问题找到了,加上__stdcall就好了.

110,567

社区成员

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

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

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