DllImport传参

乖紫 2012-09-25 08:30:34
引用c++的一个dll,有一函数原型是getJumbIcon(CONST TCHAR *filePath),c#里参数类型应该怎么定义,传的是字符串
...全文
229 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2012-09-27
  • 打赏
  • 举报
回复
不是告诉你了么,成员函数不行。
乖紫 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

[DllImport("DLL文件名.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
返回类型 getJumbIcon([MarshalAs(UnmanagedType.LPTStr)]string filePath)
[/Quote]

还是这个错误,用CallingConvention.Cdecl就出现这个错误
此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。
iyomumx 2012-09-25
  • 打赏
  • 举报
回复
[DllImport("DLL文件名.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
返回类型 getJumbIcon([MarshalAs(UnmanagedType.LPTStr)]string filePath)
乖紫 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

C++的成员函数不能这么使用,事实上成员函数还有一个隐藏的this指针,导致参数不匹配。

你得导出一个全局函数。
[/Quote]

我不懂,反正是别人自己写的,里边就这一个函数。
乖紫 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

是string
LPCTSTR =CONST TCHAR *->String C#
LPTSTR= -> char *->[MarshalAs(UnmanagedType.LPTStr)] string (C#)
[/Quote]

额 写的什么啊 囧
乖紫 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

[DllImport("dll.dll", CallingConvention = CallingConvention.Cdecl)]

由于默认一般是Winapi,在桌面平台上等于StdCall,如果出现堆栈不平衡,一般表示dll导出函数使用cdecl调用约定。
[/Quote]

不行
此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。
threenewbee 2012-09-25
  • 打赏
  • 举报
回复
C++的成员函数不能这么使用,事实上成员函数还有一个隐藏的this指针,导致参数不匹配。

你得导出一个全局函数。
蔡袅 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

[DllImport("dll.dll", CallingConvention = CallingConvention.Cdecl)]

由于默认一般是Winapi,在桌面平台上等于StdCall,如果出现堆栈不平衡,一般表示dll导出函数使用cdecl调用约定。
[/Quote]楼上说的也是一种情况
蔡袅 2012-09-25
  • 打赏
  • 举报
回复
是string
LPCTSTR =CONST TCHAR *->String C#
LPTSTR= -> char *->[MarshalAs(UnmanagedType.LPTStr)] string (C#)
iyomumx 2012-09-25
  • 打赏
  • 举报
回复
[DllImport("dll.dll", CallingConvention = CallingConvention.Cdecl)]

由于默认一般是Winapi,在桌面平台上等于StdCall,如果出现堆栈不平衡,一般表示dll导出函数使用cdecl调用约定。
乖紫 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

getJumbIcon(string filePath)
[/Quote]

不行
对 PInvoke 函数“MyStart!MyStart.Data::getJumbIcon”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
threenewbee 2012-09-25
  • 打赏
  • 举报
回复
getJumbIcon(string filePath)

110,535

社区成员

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

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

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