[英]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.