Передача структуры через cgo - PullRequest
0 голосов
/ 20 февраля 2020

Я использую cgo для вызова c с go. Я хочу передать структуру через функцию. В моем файле c это выглядит так:

#include <stdio.h>

void test(TestStruct val) {
  printf(val);
}

В моем файле go я делаю это:

package main

// #cgo CXXFLAGS: -I/usr/lib/
// #cgo LDFLAGS: -L/usr/lib/ -lstdc++
//#include <file.c>
import "C"

type TestStruct struct {
  val  string
  type string
}

func main() {
  var value = TestStruct{ "foo", "bar" }

  C.test(value);
}

, но это не работает. Выдает эту ошибку:

не может определить тип имени для C .test

1 Ответ

0 голосов
/ 20 февраля 2020

TestStruct не определено в коде C. Попробуйте добавить определение.

Вам также понадобится использовать c 1015 * строки C вместо встроенной строки Go в структуре.

В качестве отступления: в вашем коде C есть еще две ошибки. printf(val) не работает, потому что printf не может использоваться для прямой печати структуры. Кроме того, никогда не должен использовать что-либо, кроме строкового литерала для первого аргумента printf по соображениям безопасности. Замените эту строку на что-то вроде puts(val.val) или printf("%s", val.val).

...