go调用C++ Dll

package main

import (
"C"
"fmt"
"syscall"
"unsafe"
)

//由于C++和go基本数据类型的不同,在go调用c++DLL时,只能传递指针
//c++:int ---> go:uintptr(n)
//c++:char*--->go:uintptr(unsafe.Pointer(xxxstring))

func main() {
msg := "Integrated Camera"
var usbName *C.char = C.CString(msg)
handle, err := syscall.LoadDLL("usb.dll")
if err != nil {
fmt.Println(err.Error())
return
}
getID, err := handle.FindProc("getUsbId")
if err != nil {
fmt.Println("getUsbId 不存在 err:", err.Error())
return
}
ret, _, err := getID.Call(uintptr(unsafe.Pointer(usbName)))
if err != nil {
fmt.Println("结果为:", ret)
}
var a int
a = int(ret)
fmt.Println(a)
}

posted @ 2021-07-08 00:15  MrJuJu  阅读(772)  评论(0编辑  收藏  举报