5

dllからのgolangからCAPIを呼び出す必要があります。問題は、C機能にバッファが必要なことです。golangでバッファを作成する方法を教えてください。そうすれば、バッファをC機能に渡すことができますか?

void fooGetString(char* buffer, int buffer length)
4

2 に答える 2

6

このようなものが機能するはずです:

s := make([]byte, 256)
C.fooGetString((*C.char)(unsafe.Pointer(&s[0])), C.int(len(s)))
于 2012-04-22T01:10:51.950 に答える
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
于 2012-04-22T11:22:05.517 に答える