(百分100 !!! 求解一个小问题)有关回调函数参数问题

soul850224 2012-01-11 07:15:54
好。
我有个问题..如下:
就是说 回调函数的参数并非是我定义的
回调函数的调用也不是我

我有什么办法可以获取到回调函数中的参数值,就是在主函数中或去
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback_other);
//这个是注册回调
size_t write_callback(char *buffer,size_t size)
// 这是回调声明

问题是我想获取到 这个buffer 在主函数或其他函数中

不可以用全局变量 因为我要封成库 支持多线程...

拜托各位大侠解惑

大家踊跃提意见 人人有分 当然有效解决分多些 谢谢 各位!!!!
...全文
238 点赞 收藏 25
写回复
25 条回复
soul850224 2012年01月12日
[Quote=引用 24 楼 xidianhunhun 的回复:]
可以在curl_easy_setopt这里面增加一个参数,把buf传进去。
[/Quote]

curl_easy_setopt()
是a库提供的
改不了...
xiexie
回复 点赞
AthlonXP1800plus 2012年01月12日
可以在curl_easy_setopt这里面增加一个参数,把buf传进去。
回复 点赞
gqjjqg 2012年01月12日
[Quote=引用 21 楼 soul850224 的回复:]

完了 我有点晕了/./
其实就是这样一个问题:简单的例子

// 我想编译成的a.lib库的接口
fun(char *buf,int len...)
{}

// 我在我库中调用的库提供的回调
callback(char *buf_1,int len...)
{}

其实我就是想让fun中的buf值为 callback中的buf_1

....
[/Quote]

我语文不太好,搞不太懂你的意思....
回复 点赞
soul850224 2012年01月12日
这个 这个 就是这么个问题
不想用全局..静态..
回复 点赞
soul850224 2012年01月12日
完了 我有点晕了/./
其实就是这样一个问题:简单的例子

// 我想编译成的a.lib库的接口
fun(char *buf,int len...)
{}

// 我在我库中调用的库提供的回调
callback(char *buf_1,int len...)
{}

其实我就是想让fun中的buf值为 callback中的buf_1

....

回复 点赞
gqjjqg 2012年01月12日
[Quote=引用 19 楼 soul850224 的回复:]

callback函数的代码你不是可以看到的吗?
在函数里面调用你自己的方法,把buffer作参数传给你不就好了?


可能是我描述的有问题:

我需要回调函数中数值的函数 还需要别的函数中的传值
所以这样好像不行...
[/Quote]

我晕,不是一样的吗?
比如你的库要用callback中的buffer的内容。
那你就可以在库里面分配好指定的大小,然后在callback里调用一个set的方法,把buffer内容copy到 你库里分配好的空间,然后你想怎么用库的东西就怎么用。
除非你想对buffer地址里的内容进行修改,如果是这样,那你肯定要在这个callback里干活的。
回复 点赞
soul850224 2012年01月12日
callback函数的代码你不是可以看到的吗?
在函数里面调用你自己的方法,把buffer作参数传给你不就好了?


可能是我描述的有问题:

我需要回调函数中数值的函数 还需要别的函数中的传值
所以这样好像不行...
回复 点赞
gqjjqg 2012年01月12日
[Quote=引用 14 楼 soul850224 的回复:]

引用 13 楼 gqjjqg 的回复:
引用 12 楼 soul850224 的回复:

谢谢 各位捧场 指教

其实我的问题就是:

问题是我想在主函数或者其他函数中获取到这个buffer?

但是不想用 全局 静态

还有什么别的办法解决么
思路也好 谢了 各位


你的意思是说开放给你的只有一个callback,你要在其他地方获取到buffer留作他用?
不……
[/Quote]

callback函数的代码你不是可以看到的吗?
在函数里面调用你自己的方法,把buffer作参数传给你不就好了?
回复 点赞
soul850224 2012年01月12日
我想要是最后真没办法

只能取个折中的方法

互斥+回调callback_1()中在注册回调callback_2()了。

各位大侠 踊跃提意见 或 思路 谢谢 各位了..

回复 点赞
morrist1987 2012年01月12日
在callback中再注册一个回调函数?每次处理callback之后就去处理callback2?

瞎想的,不可行无喷,
回复 点赞
soul850224 2012年01月12日
[Quote=引用 13 楼 gqjjqg 的回复:]
引用 12 楼 soul850224 的回复:

谢谢 各位捧场 指教

其实我的问题就是:

问题是我想在主函数或者其他函数中获取到这个buffer?

但是不想用 全局 静态

还有什么别的办法解决么
思路也好 谢了 各位


你的意思是说开放给你的只有一个callback,你要在其他地方获取到buffer留作他用?
不用全局,那你把想做的事情全放callbac……
[/Quote]

嗯 怎么实现 在callback 中把数据传到其他的函数 或是 主函数中呢?

谢谢
回复 点赞
gqjjqg 2012年01月12日
[Quote=引用 12 楼 soul850224 的回复:]

谢谢 各位捧场 指教

其实我的问题就是:

问题是我想在主函数或者其他函数中获取到这个buffer?

但是不想用 全局 静态

还有什么别的办法解决么
思路也好 谢了 各位
[/Quote]

你的意思是说开放给你的只有一个callback,你要在其他地方获取到buffer留作他用?
不用全局,那你把想做的事情全放callback里不就好了,或者在callback里吧buffer传递给你的主函数和其他函数呗。
回复 点赞
soul850224 2012年01月11日
谢谢 各位捧场 指教

其实我的问题就是:

问题是我想在主函数或者其他函数中获取到这个buffer?

但是不想用 全局 静态

还有什么别的办法解决么
思路也好 谢了 各位
回复 点赞
soul850224 2012年01月11日
[Quote=引用 8 楼 dourgulf 的回复:]
感觉LZ是个外国人说的中国话~

引用楼主 soul850224 的回复:
问题是我想获取到 这个buffer 在主函数或其他函数中

LZ是想说:
问题是我想在主函数或者其他函数中获取到这个buffer?
是这样吗?

我想全局变量是必须的,你要封装成库或者多线程使用也不见得就一定不能用全局变量。
比如定义
static std::string g_buffer;
get……
[/Quote]

呵呵 我看来看去时说的有问题
恩 就是这个意思

问题是我想在主函数或者其他函数中获取到这个buffer?
因为要运用的地方时 开发板上 比较要求实时性 和 效率
所以是想最好不用全局+互斥...
不过还是谢谢 \(^o^)/~
回复 点赞
mymtom 2012年01月11日
很久以前用过,明天去公司找找。
回复 点赞
子达如何 2012年01月11日
感觉LZ是个外国人说的中国话~
[Quote=引用楼主 soul850224 的回复:]
问题是我想获取到 这个buffer 在主函数或其他函数中
[/Quote]
LZ是想说:
问题是我想在主函数或者其他函数中获取到这个buffer?
是这样吗?

我想全局变量是必须的,你要封装成库或者多线程使用也不见得就一定不能用全局变量。
比如定义
static std::string g_buffer;
get_buffer(std::string& buf);
set_buffer(const std::string& buf);
在回调函数中set_buffer,主函数或者其他函数需要访问buffer的时候调用get_buffer。对于多线程,你只需要在get_buffer和set_buffer中做好互斥访问就可以了。
进一步:你应该抽象成一个类,把g_buffer和互斥需要的相关变量封装起来。
将这个类设计成一个“单例”。
BTW:设计库要比写应用程序付出太多太多的精力了~
回复 点赞
gfzeng 2012年01月11日
变量用个指针指, 或者全局变量就可以了。
回复 点赞
ProgrammingRing 2012年01月11日
同等解释。。。
回复 点赞
yuanhong2910 2012年01月11日
定义一个静态变量,在回调里面把buffer赋值给这个静态变量,在写一个函数获取这个静态变量
回复 点赞
氰客 2012年01月11日
等解释、
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告