我得到了一个代码。我需要使用以下函数,但是我在调用它时遇到了问题。
int myFunction(const struct LQuery *pQuery,
f_Callback Callback,
const void *pPriv);
我有以下定义
typedef void (f_Callback) (int NumOfRecordsFound,
void *pPriv,
const tL_QueryResult *pData);
我知道Callback
应该是my_callbackFunction
的指针,但我似乎无法理解如何设置参数。据我所知,pQuery
传递给回调函数,但f_Callback
需要3个参数。
即
int main (int Argc, char *pArgv[])
{
myFunction(what should go here and WHY)
}
答案 0 :(得分:3)
将从myFunction
调用回调函数。您必须将您的回调函数作为参数传递。这是一个例子:
#include <stdio.h>
typedef void (f_Callback)(int a,
int b,
int c);
int myFunction(int a, f_Callback* callback)
{
callback(a, a+1, a+2);
}
void myCallback(int a, int b, int c)
{
printf("a: %d, b: %d, c: %d\n", a, b, c);
}
int main()
{
myFunction(5, &myCallback);
return 0;
}
预期产出:
$./a.out
a: 5, b: 6, c: 7
答案 1 :(得分:2)
typedef不正确。它应该是
typedef void (*f_Callback) (
int NumOfRecordsFound,
f_Callback Callback,
const void *pPriv);
这是一个适当的指向函数的指针 - 注意这个星;否则它会为函数原型声明一个typedef,你不能将它作为变量使用,尽管它可以在函数声明中使用。
如果你有像
这样的功能int myFunction(const struct LQuery *pQuery,
f_Callback Callback,
const void *pPriv);
回调
void my_callback_function(int records_found,
f_Callback callback,
const void *priv)
{
...
}
您可以简单地将myfunction
称为
myFunction(the_query, my_callback_function, the_private_pointer);
左值my_callback_function
将衰减为指向函数的指针,因此不需要&
个字符。