プロが教えるわが家の防犯対策術!

下記のサイトを参考にさせて頂き、BCB5からSQLite3を操作しようと格闘中です。
http://members.jcom.home.ne.jp/komina/wiki/42434 …

TEdit1に郵便番号7桁を入力して、Button1クリックでMemo1に該当住所等を表示するものですが
コンパイルエラーが発生して対処法がわかりません。ご教授お願いいたします。
ちなみに、そこで紹介されているライブラリのリンクが上手くいかないので
sqlite3.cをプロジェクトに追加してメイクしております。
また、別のサイトではUTF-8を使わないといけない様なことも書いてありました。

エラー内容は、
E2034 'int(*(_closure)(void*,int char**,char**))(void*,int,char**,char**)'型は'int(*)void*,int,char**,char**)'型に変換できない
E2342 パラメータ'callback'はint(*)(void*,int,char**,char**)型として定義されているのでvoidは渡せない

以下、ソース抜粋です。
int TFmMain::callback(void* arg,int argc,char** argv,char** column){
AnsiString addr1=argv[0];
AnsiString addr2=argv[1];
AnsiString addr3=argv[2];

add_message(addr1+addr2+addr3);

return SQLITE_OK;
}

void __fastcall TFmMain::Button1Click(TObject *Sender)
{
sqlite3* db;

if(sqlite3_open("DBTEST1.db",&db)==SQLITE_OK){
add_message("DB open");

int rtn;
char* sql;

sql=sqlite3_mprintf("SELECT ADDR1,ADDR2,ADDR3 FROM ZIP WHERE ZIP=%d"
,StrToInt(Edit1->Text));

add_message(sql);

rtn=sqlite3_exec(db,sql,callback,NULL,NULL); <<< ここでエラー発生します!!
if(rtn!=SQLITE_OK){
add_message("COMMAND err");
}

sqlite3_free(sql);
sqlite3_close(db);
add_message("DB close");
}else{
add_message("DB open err");
}
}

A 回答 (2件)

> 具体的にはどのように直せばいいんでしょうか?



callback巻子をstaticメンバにする。

この回答への補足

できたようです。

Main.cppに

void add_message(AnsiString msg){
FmMain->Memo1->Lines->Add(msg);
}

static int callback(void* arg,int argc,char** argv,char** column){
AnsiString addr1=argv[0];
AnsiString addr2=argv[1];
AnsiString addr3=argv[2];

}

とし、Main.hのextern部に両方宣言するとうまくいきました。

補足日時:2012/04/24 00:54
    • good
    • 0
この回答へのお礼

遅くなりましたが、ありがとうございます。
私の乏しい知識ではうまくいかない様です。

お礼日時:2012/04/16 12:50

callbackが 非-staticなメンバ関数だから。

    • good
    • 0
この回答へのお礼

度々ありがとうございます。
一回目の質問は削除依頼出しときました。
具体的にはどのように直せばいいんでしょうか?

お礼日時:2012/04/15 12:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!