[英]callback function: difference between void(*func)(int) and void(func)(int)
[英]sqlite3 change in the func callback the parameter void* notUsed to int* C++
我需要从回调函数返回一个整数,但是我没有成功。 我尝试过-但是什么也没有。 如果您能帮助我,我将非常高兴。
这是我的代码:
using namespace std;
int main()
{
sqlite3* db;
char* zErrMsg;
sqlite3_open("try.db", &db);
//do something...
string query = "select * from myTable";
int *ptr;
sqlite3_exec(db, query.c_str(), callback, ptr, &zErrMsg);
cout << ptr << endl;
system ("pause");
return 0;
}
int callback(void* notUsed, int argc, char** argv, char** azCol)
{
/*
chane void* notUsed to int*
???how???
*/
return 0;
}
您必须传递有效内存的地址(例如,在堆栈上)或将其分配(堆)给回调函数,如果分配的话,还必须释放它。
sqlite3_exec()
函数的第四个参数将是callback()
函数的第一个参数,其类型为void*
。 因此,如果传递int
的地址,则必须将void*
解释为int*
。
我对其进行了更改,以便内存( int someNumber
)位于调用方函数(main)中,并传递其地址。 在回调函数中,您需要将void*
为所需的指针类型,此处为int*
并分配一个值。
它应该是:
...
int main()
{
...
int someNumber;
sqlite3_exec(db, query.c_str(), callback, &someNumber, &zErrMsg);
cout << someNumber << endl;
...
}
int callback(void* someNumberArg, int argc, char** argv, char** azCol)
{
int* someNumber = reinterpret_cast<int*> (someNumberArg);
*someNumber = 42;
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.