golang如何创建缓冲区以传递给C dll函数?
问题描述:
我需要从一个dll调用一个来自golang的C API。 问题是C函数需要缓冲区,如何在golang中创建 缓冲区,然后我可以将缓冲区传递给C函数?golang如何创建缓冲区以传递给C dll函数?
void fooGetString(char* buffer, int buffer length)
答
像这样的东西应该工作:
s := make([]byte, 256)
C.fooGetString((*C.char)(unsafe.Pointer(&s[0])), C.int(len(s)))
答
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
这个答案是不正确。 – 2012-04-22 14:34:34
我最初忘了在这里留言,但我更新了这个答案,以便它是正确的,因为它被标记为正确的答案。 – 2012-08-16 13:29:14