Go调用Delphi编写的DLL
程序员文章站
2022-08-20 16:35:39
参数整数没有问题,但是如果是字符串,要注意几个细节。 记录如下: 1.Delphi定义函数的时候,字符串参数需要使用PChar类型 2.Go传递参数的时候要将字符串转成UTF16的指针,接收的时候采用uint16的切片。 ......
参数整数没有问题,但是如果是字符串,要注意几个细节。
记录如下:
1.delphi定义函数的时候,字符串参数需要使用pchar类型
2.go传递参数的时候要将字符串转成utf16的指针,接收的时候采用uint16的切片。
1 dll := syscall.mustloaddll("encryptdll.dll") 2 defer syscall.freelibrary(dll.handle) 3 f1 := dll.mustfindproc("test06") 4 fmt.println("f1>>>>", f1) 5 6 p1, _ := syscall.utf16ptrfromstring("sql") 7 p2 := make([]uint16, 100) // pass word limited length! syscall.max_path 8 9 r1, r2, err := f1.call(uintptr(unsafe.pointer(p1)), uintptr(unsafe.pointer(&p2))) 10 if err != nil { 11 fmt.println(r1, r2, p1, p2, err.error(), syscall.utf16tostring(p2)) 12 }