gpt4 book ai didi

go - Cgo将字符串传递到C文件

转载 作者:行者123 更新时间:2023-12-01 20:22:58 24 4
gpt4 key购买 nike

我正在使用cgo并看到this有关通过go运行c++的文章:

I want to use [this function] in Go. I'll use the C interface

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


我这样做了,但是 如何将字符串作为参数传递给C++函数? 我尝试传递 rune[],但是没有用。

最佳答案

这是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文件中导入之前,需要添加所需的 header 库:

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

关于go - Cgo将字符串传递到C文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60313427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com