我需要从golang调用一个C API,它来自一个dll.问题是C函数需要一个缓冲区,如何在golang中创建缓冲区,那么我可以将缓冲区传递给C函数吗?
void fooGetString(char* buffer, int buffer length)
Run Code Online (Sandbox Code Playgroud)
这样的事情应该有效:
s := make([]byte, 256)
C.fooGetString((*C.char)(unsafe.Pointer(&s[0])), C.int(len(s)))
Run Code Online (Sandbox Code Playgroud)
小智 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))
}
Run Code Online (Sandbox Code Playgroud)
输出:
foo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2964 次 |
| 最近记录: |