c#调用 vc dll

zhzqxiazai01 2010-10-25 01:27:10
函数原型:extern "C" _declspec(dllexport) LPCSTR SearchName(LPCSTR strName,int iStart,int iCount=200)

我:
[DllImport("DllName", CharSet = CharSet.Ansi)]
static extern string SearchName(String strName, int start, int count);

这样做调用的时候报错,外部组件异常,是哪里出了问题呢?
...全文
132 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhzqxiazai01 2010-10-25
  • 打赏
  • 举报
回复
.net4.0下就会出错,3.5就一切正常
我太郁闷了
zhzqxiazai01 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 flyerwing 的回复:]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)]
public static extern string SearchName([System.Runtime.InteropServices.InAttribute……
[/Quote]

报同样的异常
zhzqxiazai01 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 debug1984 的回复:]

,int iCount=200)
这个默认值可能改变签名。
[/Quote]
那为什么只要不是在.net4.0下,就一切正常?
debug1984 2010-10-25
  • 打赏
  • 举报
回复
,int iCount=200)
这个默认值可能改变签名。
zhzqxiazai01 2010-10-25
  • 打赏
  • 举报
回复
我刚才一直在试,.net4.0下就会出错,3.5就一切正常,4.0改了什么了?
zhzqxiazai01 2010-10-25
  • 打赏
  • 举报
回复
函数原型:

extern "C" _declspec(dllexport)int ReadShpPath(LPCSTR path)

C#

[DllImport(@"c:\ShpMachName.dll", CharSet = CharSet.Ansi)]

public static extern int ReadShpPath(string path);

异常:

对 PInvoke 函数“ShpMachName_csharpCall!ShpMachName_csharpCall.Form1::ReadShpPath”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
flyerwing 2010-10-25
  • 打赏
  • 举报
回复

[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)]
public static extern string SearchName([System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string strName, int iStart, int iCount) ;
试下看这个对不对了.
datahandler 2010-10-25
  • 打赏
  • 举报
回复
异常信息贴出来,让大家看看
zhzqxiazai01 2010-10-25
  • 打赏
  • 举报
回复
没有人知道吗?

110,536

社区成员

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

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

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