参考:http://www.voidcn.com/article/p-ofnbgvoa-bpv.html

https://stackoverflow.com/questions/53721215/syscall-mustloaddll-mustfindproc-throws-the-specified-procedure-could-not-be-fo

c++:

MYLIBDLL char* testchar(int plus1);
MYLIBDLL void greet(char *name);


void greet(char *name)
{printf("Hello, %s!\n", name);
}
char* testchar(int plus1) {char* str = "hello world111111";return str;
}

main.go代码:

package mainimport ("syscall""unsafe""fmt"
)
import "C"func callDll() {dll := syscall.MustLoadDLL("hik_client.dll")procGreet := dll.MustFindProc("greet")procGreet.Call(uintptr(unsafe.Pointer(syscall.StringBytePtr("Cynhard11"))))procName := dll.MustFindProc("testchar")r, _, _ := procName.Call(1)// 获取C返回的指针。// 注意C返回的r为char*,对应的Go类型为*bytep := (*byte)(unsafe.Pointer(r))// 定义一个[]byte切片,用来存储C返回的字符串data := make([]byte, 0)// 遍历C返回的char指针,直到 '\0' 为止for *p != 0 {data = append(data, *p)  // 将得到的byte追加到末尾r += unsafe.Sizeof(byte(0))  // 移动指针,指向下一个charp = (*byte)(unsafe.Pointer(r))  // 获取指针的值,此时指针已经指向下一个char}name := string(data)  // 将data转换为字符串fmt.Printf("Hello, %s!\n", name)//var a = make([]byte, 256)//////dll32 := syscall.NewLazyDLL("hik_client.dll")//fmt.Println("call dll:", dll32.Name)//GetPeopleName := dll32.NewProc("testchar")////ret,_,err := GetPeopleName.Call(uintptr(unsafe.Pointer(&a)),2)//if err != nil {//    fmt.Println(ret,a)//    aaa := C.GoString(ret)//    //C.free(unsafe.Pointer(cs))//    //C.free(unsafe.Pointer(result))//    //fmt.Println(aaa,a)//}//result, a, _ := g.Call(4)//fmt.Println("result is :", ret)
}func main() {fmt.Println("start111111111!")callDll()//fmt.Println(C.add(2, 1))
}

go 调用dll char*传输相关推荐

  1. C#调用dll中的函数

    C#调用dll中的函数 文章分类:操作系统 文章来源:http://blog.csdn.net/strmagic/archive/2007/11/02/1863462.aspx 大家在实际工作学习C# ...

  2. C++ Builder创建和调用dll中的资源

    程序开发中经常会用到一些图标.图片.光标.声音等,我们称它们为资源(Resource).当多个窗口用到同样的资源时,可以将这些公共的资源放到一个dll文件里调用,这样,由于定位资源比在磁盘中定位文件花 ...

  3. java中通过JNA调用dll

    ---恢复内容开始--- 1. JNA简单介绍 先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言(尤其C/C++)写的代码进 ...

  4. gcc生成dll linux,gcc编译dll和调用dll

    方法一: 共有三个文件:print.h,print.c,test.c *************************************************************** p ...

  5. Qt调用dll中的功能函数

    http://www.cnblogs.com/hicjiajia/archive/2010/08/27/1810239.html 声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll ...

  6. delphi 调用dll 整形返回值_VS2015 编写C++ DLL库及C++、 C#、python 调用

    VS2015生成c++dll C++ 程序调用 dll C# 程序调用 dll 1. VS2015 生成C++dll 可以有两种方法 通过_declspec(dllexport) extern &qu ...

  7. QT 调用 DLL 的三种方法

    Qt调用DLL方法一:使用Win32 API h文件 typedef bool (CALLBACK* SetKeyBoardHook)(HWND); HINSTANCE hDLL; // Handle ...

  8. 如何调用 DLL 中的函数

     如何调用 DLL 中的函数 在 DLL工程中的 cpp中函数定义如下: extern "C" _declspec (dllexport ) int add(int a, ch ...

  9. 使用extern C改善显式调用dll

    extern "C"的简单解析         我们前面介绍了显式调用dll的方法,例如  http://www.cnblogs.com/laogao/archive/2012 ...

最新文章

  1. dedecms首页如何调用专题页描述和链接
  2. 【CF526F】Pudding Monsters
  3. linux 查询线程是否结束_批量随机键值查询测试
  4. 外服封号_外服大主播Diss原神:因为吐槽氪金体验差,米哈游把我号封了
  5. 《鸟哥的Linux私房菜--基础篇》学习
  6. java inner static_Java SE Static Inner
  7. linux 查看共享磁盘_如何可视化地查看 Linux 系统磁盘使用情况?
  8. python线程暂停_在python中暂停一个线程和另一个线程
  9. 机器学习,总是不得其法,问题出在哪里?
  10. 找不到该项目,请确认该项目的位置的办法(转)
  11. HyBrid App框架介绍
  12. 在Cocos2d-x中使用CocosBuilder
  13. 教你解决PC微信“版本过低”无法登陆的问题
  14. 虚拟软盘启动OS方法
  15. 支持SwiftUI!Swift版图片视频浏览器-JFHeroBrowser上线啦
  16. matlab在solver,matlab的solver
  17. Java常用类--日期时间相关的类
  18. HTML技能点--设置网页图标标志
  19. Selenium 爬取评论数据,就是这么简单!
  20. EDI在汽车行业的应用

热门文章

  1. Android中堆unlink利用学习
  2. insight-vmi 编译中的问题
  3. 开机秒全国99%电脑 实战UEFI安装Win8
  4. android 自定义event,Android运用onTouchEvent自定义滑动布局
  5. 专题 7 设备文件编程
  6. 嵌套 思维导图_工作小Tips:如何用思维导图来整理你的汇报
  7. python监控错误语句,基于Python的关键字监控及告警
  8. win10系统启动服务器不可用,解决win10专业版windows installer服务不可用不能启动更不能访问...
  9. 形态学边缘提取matlab,在Matlab平台下基于形态学方法对LIDAR数据进行建筑物边缘提取...
  10. bool变量取反_Task 01:Python基础入门:从变量到异常处理(第1天)