2015-06-19 1 views
0

Мне нужно вызвать функцию C, которая нуждается в указателе struct как аргументе. Вот Код C:Как построить C struct в Go side?

struct Position 
{ 
    uint64_t index; 
    uint64_t offset; 
}; 

int read(const char* filename, const Position* pos, const char** data) 

Так Go кода, я думаю, я должен таНос памяти для создания объекта Позиции и передать его указатель на функцию C. Возможно, мне также нужно освободить память. Похоже, что C.CString(). Итак, как я могу это сделать? Есть ли какой-нибудь пример кода? СПАСИБО.

ответ

0

Как называть c из golang ясным сгенерированным заглушкой. используйте go build -work src/main.go для создания заглушки и получения рабочего каталога. найти прототип функции в файле _obj/_cgo_gotypes.go. то есть я могу получить следующий сгенерированный идти окурок:

type _Ctype_Position _Ctype_struct__Position 
type _Ctype_struct__Position struct { 
//line :1                                                   
    index _Ctype_int 
//line :1                                                   
    offset _Ctype_int 
//line :1                                                   
} 
func _Cfunc_read(p0 *_Ctype_char, p1 *_Ctype_struct__Position, p2 **_Ctype_char) (r1 _Ctype_int) 

, если у меня есть файл с заголовком так:

typedef struct _Position 
{ 
    int index; 
    int offset; 
}Position; 

extern int read(const char* filename, const Position* pos, const char** data); 

BTW вам нужно ссылаться на функции С в ходе источника, чтобы сделать зависимость для go build для генерации ссылочной функции.