class csqlite
{
...
bool sql_Select(const char *pSql)
{
...
int res = sqlite3_exec(pDB,str.c_str(),callback,0,&errMsg);
...
return true;
}
...
static int callback(void *NotUsed,int argc,char **argv,char **azColName)
{
...
return 0;
}
...
};我现在这样调用
void CProjectDlg::OnBtnRead() 
{
CSqlite sqlite;
bool b = sqlite.sql_Select("select * from tab;");
}callback里面会出结果,现在我想把它放到CProjectDlg类里面,然后在sqlite.sql_Select中传递这个函数名过去用。怎么实现呢?急,高手速来,谢谢。

解决方案 »

  1.   

    http://topic.csdn.net/t/20040105/01/2632900.html
      

  2.   

    在CProjectDlg类中按照callback的形式定义一个静态函数,给sqlite.sql_Select再定义一个参数,把函数传过来。
      

  3.   

    类似函数指针的用法吧。先typedef 一个类型,然后在函数实现时传入一个这个类型的地址,然后调用这个地址,参考网上诸多的       函数指针 回调  贴子。
      

  4.   

    定义CProjectDlg静态成员函数 static void CProjectDlg::readFund();在你的sqlite3_exec作为参数传递
      

  5.   

    实现
    class CProjectDlg

    ...
    public:
    static int callback(void *NotUsed,int argc,char **argv,char **azColName) 

    ... 
    return 0; 

    ... 
    }; 调用:
    int res = sqlite3_exec(pDB,str.c_str(),CProjectDlg::callback,0,&errMsg); 
      

  6.   

    typedef int (* CALLBACK)(void *NotUsed,int argc,char **argv,char **azColName);  //声明函数指针原型bool sql_Select(CALLBACK callback);  //sql_Select函数原型void CProjectDlg::OnBtnRead()
    {
    CSqlite sqlite;
    CALLBACK callback = ...;  //取函数地址
    bool b = sqlite.sql_Select(callback);  //调用