首页 > Windows开发 > 详细

WINDOWS: GO动态调用DLL,并获取字符串返回值的坑

时间:2021-06-23 15:42:10      阅读:12      评论:0      收藏:0      [点我收藏+]

DLL中导出的C函数

static const char* s_ptr="asdf"

extern "C" _declspec (dllexport) char* TestString(char** ppChar, int* plen) {

wchar_t wp[] = {L"测试中文啊aahahah哈哈哈"};
static std::string ap = WToX(wp, CP_UTF8);

return (char*)s_ptr;
}

 

GO加载DLL并获得返回值

  package main

   import "C"  必须要有

 

    lib := syscall.NewLazyDLL("winfunc.dll")

    testString := lib.NewProc("TestString")

    var p1 uintptr
    var p2 uintptr
    testString.Call(uintptr(unsafe.Pointer(&p1)), uintptr(unsafe.Pointer(&p2)))  GO里面都是转换为uintptr形式传递到C的,所以这里直接定义两个uinptr变量即可,后面在进行类型转换
 
    m111 := (*C.char)(unsafe.Pointer(p1))
    println(m111)
    s := C.GoString(m111)
    println(s)

WINDOWS: GO动态调用DLL,并获取字符串返回值的坑

原文:https://www.cnblogs.com/cuidh1983/p/14922485.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!