求助C#如何调用C++字符串

MrDoubleU 2015-08-30 04:06:42
本人编程渣渣。。网上教程看不懂
我把代码贴出来

C++中的dll函数原型是

extern "C" __declspec(dllexport) const char *Add(const char *x)
{
return x;
}

C#声明是()
[DllImport("Algorithm.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public static extern string Add(string x);

我现在在窗口上想把字符串输出到textbox上
textbox.Text = CPPDLL.Add("fdsfdf");
一运行就显示vshost32.exe已停止运行

脑袋都要大了求救啊
...全文
144 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
MrDoubleU 2015-08-30
  • 打赏
  • 举报
回复
引用 6 楼 ajianchina 的回复:
你还可以这样,看看如何 public static extern StringBuilder Add(string x); textbox.Text = CPPDLL.Add("fdsfdf").ToString();
不知为什么,现在唯一的问题是C#传给C++的参数只有首字符,返回没有问题,比如Add(“fdsafdsfsf00”),结果返回了个f返回没问题,传进去时候有问题
ajianchina 2015-08-30
  • 打赏
  • 举报
回复
你还可以这样,看看如何 public static extern StringBuilder Add(string x); textbox.Text = CPPDLL.Add("fdsfdf").ToString();
ajianchina 2015-08-30
  • 打赏
  • 举报
回复
那你就用byte[]返回吧,再转成字符串就行,其实转换也没那么死板的。
MrDoubleU 2015-08-30
  • 打赏
  • 举报
回复
引用 3 楼 ajianchina 的回复:
都是在项目属性里,第二个图在属性》调试》启用调试器
都试过了,这样的话整个程序就停止了,我把返回值换了个int就没事,看样子是返回值的问题,请问为什么啊
ajianchina 2015-08-30
  • 打赏
  • 举报
回复
都是在项目属性里,第二个图在属性》调试》启用调试器
MrDoubleU 2015-08-30
  • 打赏
  • 举报
回复
自己顶!!!!!!!!!!!!!!!!!!
ajianchina 2015-08-30
  • 打赏
  • 举报
回复
先通过这两个设置测试一下

110,535

社区成员

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

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

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