Cgo передать строку в файл C - PullRequest
       11

Cgo передать строку в файл C

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

Я использую cgo и увидел этот пост о запуске c ++ из go:

Я хочу использовать [ эта функция] в Go. Я буду использовать C интерфейс

  // foo.h
  #ifdef __cplusplus
  extern "C" {
  #endif
   typedef void* Foo;
   Foo FooInit(void);
   void FooFree(Foo);
   void FooBar(Foo);
  #ifdef __cplusplus
  }
  #endif

Я сделал это, но как я могу передать строку в качестве аргумента функции C ++? Я пытался передать rune[] но это не сработало.

1 Ответ

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

Это код Go:

// GetFileSizeC wrapper method for retrieve byte lenght of a file
func GetFileSizeC(filename string) int64 {
    // Cast a string to a 'C string'
    fname := C.CString(filename)
    defer C.free(unsafe.Pointer(fname))
    // get the file size of the file
    size := C.get_file_size(fname)
    return int64(size)
}

С C

long get_file_size(char *filename) {
  long fsize = 0;
  FILE *fp;
  fp = fopen(filename, "r");
  if (fp) {
    fseek(fp, 0, SEEK_END);
    fsize = ftell(fp);
    fclose(fp);
  }
  return fsize;
}

Помните, что вам нужно добавить нужную библиотеку заголовков перед импортом в Go file:

package utils

// #cgo CFLAGS: -g -Wall
// #include <stdio.h>   |
// #include <stdlib.h>  | -> these are the necessary system header
// #include <string.h>  |
// #include "cutils.h" <-- this is a custom header file
import "C"
import (
    "bufio"
    "encoding/json"
    "fmt"
    "io/ioutil"
     ....
)

Это старый проект, который вы можете использовать для будущего рабочего примера:

https://github.com/alessiosavi/GoUtils

...