将指针从go传递到c-dll

将指针从go传递到c-dll,go,system-calls,Go,System Calls,我试图传递一个指向dll的双指针,该dll是由C在制作dll包装包时创建的 下面是C代码 int getData(uint32_t ** buffer, uint32* sizeofBuffer) { //... *sizeofBuffer = n; *buffer = new uint32_t[n]; //do something return 0; } void releaseBuf(void* buffer) { delete buffer; }

我试图传递一个指向dll的双指针,该dll是由C在制作dll包装包时创建的

下面是C代码

int getData(uint32_t ** buffer, uint32* sizeofBuffer) {
  //...
  *sizeofBuffer = n;
  *buffer = new uint32_t[n];

  //do something 
   return 0; 
}

void releaseBuf(void* buffer) {
     delete buffer;
}
下面是go代码。我希望下面的代码运行良好,但事实并非如此

var (
   Handle =  syscall.LoadLibrary(`library\myDll.dll`)
   procGet,_ = syscall.GetProcAddress(Handle, "getData")
   procRelease,_ = syscall.GetProcAddress(Handle, "releaseBuf")
)
func main() {
   var bufferPtr *uint32
   var size uint32
   _,_,err := syscall.Syscall(proc,uintptr(2), uintptr(unsafe.Pointer(&bufferPtr )), uintptr(unsafe.Pointer(&size)),uintptr(0))
   if 0 != err {log.Fatal(syscall.Errno(err))}

var i uintptr = 0
for ; i<(uintptr)(size); i++ {
    log.Printf("%d", (**uint32)(uintptr(unsafe.Pointer(bufferPtr ))+uintptr(i)*unsafe.Sizeof(*bufferPtr )))
}

   _,_,err := syscall.Syscall(proc,uintptr(1), uintptr(unsafe.Pointer(bufferPtr)), uintptr(0), uintptr(0))
   if 0 != err {log.Fatal(syscall.Errno(err))}    
}
var(
Handle=syscall.LoadLibrary(`library\myDll.dll`)
procGet,U8;=syscall.GetProcAddress(句柄,“getData”)
ProcleLase,u=syscall.GetProcAddress(句柄,“releaseBuf”)
)
func main(){
var bufferPtr*uint32
变量大小uint32
_,_389;,err:=syscall.syscall(proc,uintpttr(2),uintpttr(unsafe.Pointer(&bufferPtr)),uintpttr(unsafe.Pointer(&size)),uintpttr(0))
如果0!=err{log.Fatal(syscall.Errno(err))}
变量i uintpttr=0

例如,我重新检查并发现了我的错误

将例行程序替换为以下内容

log.Printf("%d", *(*uint32)(unsaef.Pointer(uintptr(unsafe.Pointer(buffer))+i*unsafe.Sizeof(*buffer))))
:)