2013-05-04 16 views
12

Chcę zawinąć funkcję C, która pobiera char* wskazując (pierwszy element) niepustym buforze bajtów. Próbuję zawinąć to w funkcję Go za pomocą CGo, tak aby móc przekazać to []byte, ale nie wiem jak to zrobić. Uproszczona wersja podpisu funkcji C jestOd [] bajtu na char *

void foo(char const *buf, size_t n); 

Próbowałem przechodzącą wskaźnik do pierwszego byte w wycinku z

C.foo(&b[0], C.size_t(n)) 

To nie kompiluje, ale:

cannot use &b[0] (type *byte) as type *_Ctype_char in function argument 

Jaka jest prawidłowa procedura? go-wiki opisuje tylko sytuację odwrotną.

Odpowiedz

26

Ok, który okazał się być dużo łatwiejsze niż myślałem:

(*C.char)(unsafe.Pointer(&b[0])) 

załatwia sprawę. (Znaleziono to pod adresem golang-nuts.)