C#调用C++编写的dll函数参数为指针

soar_jyh 2010-10-12 03:50:24
如题,c#调用c++编写的dll,其中函数为char*,如何传递参数值.
举例:c++函数原型为bool Test(char*,input,char* output);其中返回值为真表示函数调用成功,假表示调用失败,参数output是我们最终要的结果。如果是c++里调用此dll函数十分简单,没有任何问题,可在c#里就不知道如何操作了,我试了
[DllImport("****.dll",EntryPoint = "Test")]
static extern bool Test(string input, ref string output);
这样的调用,程序出错:“尝试读取或写入受保护的内存”

static extern bool Test(string input, ref char[] output);
这样的调用,程序出错:“System.ExecutionEngineException”

c#没怎么搞过,望高手指点!
...全文
216 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
soar_jyh 2010-10-12
  • 打赏
  • 举报
回复
感谢楼上几位,StringBuilder 没问题。

用intptr没错,但是得到的结果是一些乱码,可能如hdt兄台所说字符串编码没搞好,不太会
damjmk2 2010-10-12
  • 打赏
  • 举报
回复
StringBuilder sb = new StringBuilder(1000) 分配空间
soar_jyh 2010-10-12
  • 打赏
  • 举报
回复
[DllImport("****.dll",EntryPoint = "Test")]
static extern bool Test(string input, ref StringBuilder output);
加ref调用和string调用是一样的问题,不加ref出现警告:“警告: 非托管代码已经在 StringBuilder 缓冲区溢出。进程可能变得不稳定。在进行封送处理之前,未给 StringBuilder 分配足够的容量。”
如何解决?谢谢这位兄弟
真相重于对错 2010-10-12
  • 打赏
  • 举报
回复
[DllImport("****.dll",EntryPoint = "Test")]
static extern bool Test(string input, intptr output);

调用
intptr p = Marshal.AllocHGlobal(1024);
Test("stringinput",p);
String strout = Marshal.PtrToStringAuto(p);

注意字符串编码
damjmk2 2010-10-12
  • 打赏
  • 举报
回复
都用stringbulider试试吧
bloodish 2010-10-12
  • 打赏
  • 举报
回复
试试
[DllImport("****.dll",EntryPoint = "Test")]
static extern bool Test(string input, StringBuilder output);


传入用string没问题,传出要用StringBuilder


111,129

社区成员

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

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

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