C#如何调用C++编写的Dll

df_for_csdn 2016-07-02 04:40:27
Dll不是我写的,也没有源码,我目前是这样写的:

[DllImport("JLogin.dll")]
public static extern int login(ref string userName,ref string passWord, StringBuilder result);
string userName = user.UserName;
string passWord = user.PassWord;
StringBuilder result = new StringBuilder(1024);
login(ref userName, ref passWord, result);

这个dll只有一个方法: login
现在result调试后是空白的,怎么办?正常应该返回Html内容
...全文
118 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
巴士上的邂逅 2016-07-04
  • 打赏
  • 举报
回复
问题已解决?最后是什么情况?
龍过鸡年 2016-07-03
  • 打赏
  • 举报
回复
引用 楼主 u011505805 的回复:
Dll不是我写的,也没有源码,我目前是这样写的:

[DllImport("JLogin.dll")]
public static extern int login(ref string userName,ref  string passWord, StringBuilder result);  
string userName = user.UserName;
string passWord = user.PassWord;
 StringBuilder result = new StringBuilder(1024);
login(ref userName, ref passWord, result);
这个dll只有一个方法: login 现在result调试后是空白的,怎么办?正常应该返回Html内容
通常使用 stringbuilder 直接返回数据,应该有个 length 参数以获取 stringbuilder 中的字符长度 像这种情况没有指定长度,属于非托管字符串,可以试试 Marshal.PtrToStringAnsi(result); 通过指针方式返回字符串
网络菜鸟00 2016-07-02
  • 打赏
  • 举报
回复
声明这样写下: [DllImport("JLogin.dll", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] 参数用string类型。 试试看。
df_for_csdn 2016-07-02
  • 打赏
  • 举报
回复
引用 9 楼 yuankaiwsl 的回复:
[quote=引用 8 楼 u011505805 的回复:] [quote=引用 7 楼 yuankaiwsl 的回复:] 或许从var a=login(userName , passWord , result);中的a的返回能看出什么端倪
返回0[/quote]0应该表示成功。把result类型改为ref string或者string,理论上不可以[/quote] 调试直接就崩溃了
巴士上的邂逅 2016-07-02
  • 打赏
  • 举报
回复
引用 8 楼 u011505805 的回复:
[quote=引用 7 楼 yuankaiwsl 的回复:] 或许从var a=login(userName , passWord , result);中的a的返回能看出什么端倪
返回0[/quote]0应该表示成功。把result类型改为ref string或者string,理论上不可以
df_for_csdn 2016-07-02
  • 打赏
  • 举报
回复
引用 7 楼 yuankaiwsl 的回复:
或许从var a=login(userName , passWord , result);中的a的返回能看出什么端倪
返回0
巴士上的邂逅 2016-07-02
  • 打赏
  • 举报
回复
或许从var a=login(userName , passWord , result);中的a的返回能看出什么端倪
巴士上的邂逅 2016-07-02
  • 打赏
  • 举报
回复
获取从var a=login(userName , passWord , result);中的a的返回能看出什么端倪
df_for_csdn 2016-07-02
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
public static extern int login(string userName,string passWord, StringBuilder result);
还是返回为空 public static extern int login(string userName, string passWord, StringBuilder result); StringBuilder result = new StringBuilder(1024); login(userName , passWord , result);
Poopaye 2016-07-02
  • 打赏
  • 举报
回复
public static extern int login(string userName,string passWord, StringBuilder result);
巴士上的邂逅 2016-07-02
  • 打赏
  • 举报
回复
引用 1 楼 yuankaiwsl 的回复:
var a= login(ref userName, ref passWord, result); 返回的a是多少?
a是int类型,怎么会为空白呢? 你把ref去掉试试
df_for_csdn 2016-07-02
  • 打赏
  • 举报
回复
返回的是空白,刚刚找到Dll的作者,参数列表是这样的: int __stdcall login(char* user, char* pass, char* result);
巴士上的邂逅 2016-07-02
  • 打赏
  • 举报
回复
var a= login(ref userName, ref passWord, result); 返回的a是多少?

110,561

社区成员

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

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

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