2
我需要從一個dll調用一個來自golang的C API。 問題是C函數需要緩衝區,如何在golang中創建 緩衝區,然後我可以將緩衝區傳遞給C函數?golang如何創建緩衝區以傳遞給C dll函數?
void fooGetString(char* buffer, int buffer length)
我需要從一個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