golang如何创建一个缓冲区来传递给C dll函数?

时间:2012-04-21 15:54:58

标签: go

我需要从golang调用一个C API,它来自一个dll。 问题是C函数需要一个缓冲区,如何创建 golang中的缓冲区,那么我可以将缓冲区传递给C函数吗?

void fooGetString(char* buffer, int buffer length)

2 个答案:

答案 0 :(得分:6)

这样的事情应该有效:

s := make([]byte, 256)
C.fooGetString((*C.char)(unsafe.Pointer(&s[0])), C.int(len(s)))

答案 1 :(得分:5)

package main

// #include <string.h>
// void foo(char *s, int len) {
//     strncpy(s, "foo", len);
// }
import "C"

import "fmt"
import "unsafe"

func main() {
    buf := make([]byte, 256)
    C.foo((*C.char)(unsafe.Pointer(&buf[0])), C.int(len(buf)))
    fmt.Println(string(buf))
}

输出:

foo