传参-这个go语言封装c函数,使用cgo,参数怎么传?

问题描述

这个go语言封装c函数,使用cgo,参数怎么传?

需要用go语言把下列的c函数封装一下,c的函数如下:
int raw_to_span(OPResult result, int *num, int **time, short **status, double **value);

下面是我的写法,不正确,编译不通过:
func RawToSpan(result uintptr) (num int, time []int, status []int16, value []float64, ret int) {
var t = make([]C.int, num)
var s = make[]C.short, num)
var v = make([]C.double, num)
var n C.int
ret = int(C.raw_to_span(C.OPResult(result), &n, &t, &s, &v))
k := C.op2_num_rows(C.OPResult(result))
num = int(n)
for j := 0; j < int(k); j++ {
time = append(time, int(t[j]))
status = append(status, int16(s[j]))
value = append(value, float64(v[j]))
}
return
}
编译结果:
.api.go:533: cannot use &t (type *[]C.int) as type **C.int in argument to _Cfunc_op2_raw_to_span
.api.go:533: cannot use &s (type *[]C.short) as type **C.short in argument to _Cfunc_op2_raw_to_span
.api.go:533: cannot use &v (type *[]C.double) as type **C.double in argument to _Cfunc_op2_raw_to_span

我也尝试了将t,s,v声明为:var t *C.int 这样写的确是在调用c的时候可以传进去了,但是返回值的时候怎么办?

在线等解答,谢谢
更多 0

解决方案

需要用go语言把下列的c函数封装一下,c的函数如下:
int raw_to_span(OPResult result, int *num, int **time, short **status, double **value);

下面是我的写法,不正确,编译不通过:
func RawToSpan(result uintptr) (num int, time []int, status []int16, value []float64, ret int) {
var t = make([]C.int, num)
var s = make[]C.short, num)
var v = make([]C.double, num)
var n C.int
ret = int(C.raw_to_span(C.OPResult(result), &n, &t, &s, &v))
k := C.op2_num_rows(C.OPResult(result))
num = int(n)
for j := 0; j < int(k); j++ {
time = append(time, int(t[j]))
status = append(status, int16(s[j]))
value = append(value, float64(v[j]))
}
return
}
编译结果:
.api.go:533: cannot use &t (type *[]C.int) as type **C.int in argument to _Cfunc_op2_raw_to_span
.api.go:533: cannot use &s (type *[]C.short) as type **C.short in argument to _Cfunc_op2_raw_to_span
.api.go:533: cannot use &v (type *[]C.double) as type **C.double in argument to _Cfunc_op2_raw_to_span

我也尝试了将t,s,v声明为:var t *C.int 这样写的确是在调用c的时候可以传进去了,但是返回值的时候怎么办?

在线等解答,谢谢

时间: 2024-10-26 23:22:38

传参-这个go语言封装c函数,使用cgo,参数怎么传?的相关文章

对Python和Go的函数传参研究

传参一直是语言中有点纠结的东西.一提到这个,总会有人说,需要区分传值,传递引用,还有传递指针什么的.而且,貌似不同的语言对此也有不同的实现. 我自己也对这个有点搞混了,所以需要实验一下. 写在开头: 我常用的几个语言是,C++,Go语言,python这几种.三个语言中,只有C++有引用,而Python是没有指针的.参数传递主要就两类,传值和传递引用. 本文只写Python和Go语言,C++太复杂了,需要专门研究. 试验的主要分为几种类型,分别为: 单一的变量类型,比如int,float这种基本类

com组件-Com组件调用C++回调函数,如何传参

问题描述 Com组件调用C++回调函数,如何传参 一.com组件接口函数的实现: 1.成员 private: //回调函数指针 CComPtr m_pChangeTempCallbackFun;//更换模板回调函数 2.函数 bool CDllHelper::SetCallBackFun(VARIANT vaJsFun) { if(vaJsFun.vt != VT_DISPATCH) { return false; } m_pChangeTempCallbackFun = vaJsFun.pdi

setTimeout/setInterval 传参的问题

我们知道,setTimeout/setInterval 是 JavaScript 语言下的两门利器.有时候控件没反应了,代码外层包装一下 setTimeout 就可以了.JavaScript 是单线程的环境,setTimeout 的作用是把包装的代码塞入队列,而不是立刻执行.这一招对付莫名其妙的渲染问题非常有效.使用上, setTimeout/setInterval 要求第一个参数类型为 String 或 Function.遇到 Function,自然涉及传参的问题.就像 event handl

jsp传参有几种方式?

问题描述 如题. 解决方案 解决方案二:一般跟在url后面或者用post传啊解决方案三:url后面或者提交整个表单来传解决方案四:1.JavaScript传参2."?"传参3.session传参4.JavaBean传参这个是楼主要的答案吗?解决方案五:二种post和get解决方案六:是http这种吗?doget和dopost还是一般的getParameter和getAttribute解决方案七:1.JavaScript传参2."?"传参3.session传参4.Ja

js中function的参数是数组,要怎么传参

问题描述 js中function的参数是数组,要怎么传参 我在input中调用function,想向里面传一个数组,要怎么传 解决方案 var a=[1,2,3] 直接传a就行 解决方案二: <input type="button" onclick="yourfun([1,2,3,4,6])"/> 直接传就行了.不太明白问题的核心要问什么 解决方案三: fun([1,2,3]) 解决方案四: 不能直接传呀,需要传fun([[1,2,3]]),如果直接传[

关于window.open()你们都是如何利用post传参的

问题描述 关于window.open()你们都是如何利用post传参的 关于window.open()你们都是如何利用post传参的 解决方案 这没办法用post传参,只能用get 解决方案二: 用表单提交,设置target=""_blank""新窗口打开 window.open和caozhy说的一样只能get 解决方案三: win = window.open(ctx + ""/page/vulnerableNode/dataBrowse.jsp

参数-spring-rest风格传参问题

问题描述 spring-rest风格传参问题 最近手上一个项目,碰到spring REST风格传参的问题,参考代码: @RequestMapping(value="/aa/{bb}/w/{width}/h/{high}", method=RequestMethod.GET) public void testRest(@PathVariable("bb") String name, @PathVariable("width") String wid

aspx页面Url传参在火狐浏览器下Page_Load执行两次的Bug

问题描述 机器环境:Xpsp3+Vs2010+Firefox28.0问题描述:新建一个空的Website,加入一个a.aspx和b.aspxa.aspx页面代码<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="a.aspx.cs"Inherits="a"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transi

配置Tomcat解决URL传参引出的中文乱码问题

                         今天在写一个JSP页面时候,发现下面报错: <span style="font-size:18px;"> <a href="request.jsp?username=小七七">测试URL传参</a></span>     通常情况下,通过使用contentType和下面的就可以解决传参过程中的中文乱码问题,但是貌似URL传参还要设备别的东西. <% request