lomg 发表于 2018-9-20 10:18:32

golang调用c++的dll库文件

package main  

  
import (
  

"fmt"  
"syscall"
  
"unsafe"
  
)
  

  
func IntPtr(n int) uintptr {
  
return uintptr(n)
  
}
  

  
func StrPtr(s string) uintptr {
  
return uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(s)))
  
}
  
func Lib_add(a, b int) {
  
lib := syscall.NewLazyDLL("lib.dll")
  
fmt.Println("dll:", lib.Name)
  
add := lib.NewProc("add")
  
fmt.Println("+++++++NewProc:", add, "+++++++")
  

  
ret, _, err := add.Call(IntPtr(a), IntPtr(b))
  
if err != nil {
  
fmt.Println("lib.dll运算结果为:", ret)
  
}
  

  
}
  

  
func DllTestDef_add(a, b int) {
  
DllTestDef, _ := syscall.LoadLibrary("DllTestDef.dll")
  
fmt.Println("+++++++syscall.LoadLibrary:", DllTestDef, "+++++++")
  
defer syscall.FreeLibrary(DllTestDef)
  
add, err := syscall.GetProcAddress(DllTestDef, "add")
  
fmt.Println("GetProcAddress", add)
  

  
ret, _, err := syscall.Syscall(add,
  
2,
  
IntPtr(a),
  
IntPtr(b),
  
0)
  
if err != nil {
  
fmt.Println("DllTestDef.dll运算结果为:", ret)
  
}
  

  
}
  

  
func DllTestDef_add2(a, b int) {
  
DllTestDef := syscall.MustLoadDLL("DllTestDef.dll")
  
add := DllTestDef.MustFindProc("add")
  

  
fmt.Println("+++++++MustFindProc:", add, "+++++++")
  
ret, _, err := add.Call(IntPtr(a), IntPtr(b))
  
if err != nil {
  
fmt.Println("DllTestDef的运算结果为:", ret)
  
}
  
}
  

  
func main() {
  
Lib_add(4, 5)
  
DllTestDef_add(4, 5)
  
DllTestDef_add2(4, 5)
  
}


页: [1]
查看完整版本: golang调用c++的dll库文件