簡體   English   中英

sqlite3在func回調中更改參數void * notnott to int * C ++

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM