go调用c/c++ dll 函数,char*参数及返回值问题

wankaixinga · 2018-03-28 16:40:56 · 3393 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-03-28 16:40:56 的主题,其中的信息可能已经有所发展或是发生改变。

如:dll中有个函数, char myfun(char a) a为输入输出参数,返回值为char*

请问, 调用时该怎样传参数a(a的值改变后,go程序会继续调用的),返回值该如何接收(注意:请考虑char*为二进制流) 如:r1,r2,r3 := syscall.Syscall(uintptr(myfun),1,XXX,0,0,0)

  1. 对r1怎样操作,可以取到返回值?
  2. a为输入输出参数,意思就是,myfun会取到a的值,并改变a的值,a的值改变后,go中怎样取到了?a该怎么传递了?

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3393 次点击  
加入收藏 微博
8 回复  |  直到 2018-03-30 08:51:20
wankaixinga
wankaixinga · #1 · 7年之前

char myfun(char a) 前面发帖掉了* Syscall后面是2个0

wankaixinga
wankaixinga · #2 · 7年之前

都是char 【】,系统屏蔽了我的【】号

wankaixinga
wankaixinga · #3 · 7年之前

都是char 【星】,系统屏蔽了我的【星】号

wankaixinga
wankaixinga · #4 · 7年之前

怎么没人

wuchenghui
wuchenghui · #5 · 7年之前

用C.int8数组或者是C.uint8数组去传参,同样也用这两种类型去接收返回值,然后一个字节一个字节取出来转换成你想要的数据类型

wuchenghui
wuchenghui · #6 · 7年之前

我直接用C.来调用c里面的函数,这样用过是可以的,你用syscall.Syscall来调用这种没试过,你可以搜一下cgo,这些应该都是cgo的吧

wankaixinga
wankaixinga · #7 · 7年之前
wuchenghuiwuchenghui #6 回复

我直接用C.来调用c里面的函数,这样用过是可以的,你用syscall.Syscall来调用这种没试过,你可以搜一下cgo,这些应该都是cgo的吧

不考虑cgo的方式,因为是调用dll中的函数,cgo适用于调用.so类型的库

wankaixinga
wankaixinga · #8 · 7年之前

........

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传