2
dolからのgolangからC APIを呼び出す必要があります。 問題はC関数がバッファを必要とし、どのようにしてバッファをgolangに作成したら、バッファをC関数に渡すことができますか?golangはC DLL関数に渡すバッファをどのように作成しますか?
このような何かが動作するはずvoid fooGetString(char* buffer, int buffer length)
dolからの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
この答えは間違っています。 –
元々ここにコメントするのを忘れていましたが、正解とマークされているので、この回答が正しいように更新しました。 –