へぇー、そんな便利なモジュールがあるのですね。
youdaiさんが仰られるように、hsp標準機能64bitの置き換えがあるので、
あとは使いたい機能を呼び出すだけですね。
全ての機能を置き換えるのは時間が掛かるので、DBとしてシンプルな部分のみ呼び出してみました。
こちらでは動作確認できてますので、置き換えのご参考になれば幸いです。
#include "hsp3_64.as"
#include "hspint64.as"
; ここを参考に使いたいものを関数や定数を準備
; https://sqlite.org/capi3ref.html
#uselib "sqlite3_64" ; 64dllをリネームしてスクリプトと同じ所へ配置する事。
#define BUF_SIZE 512
#define NULL 0
#define SQLITE_OK 0
#func sqlite3_open "sqlite3_open" wptr, wptr
#func sqlite3_close "sqlite3_close" wptr
#func sqlite3_exec "sqlite3_exec" wptr, wptr, wptr, wptr, wptr
#func sqlite3_free "sqlite3_free" wptr
; DBオープン
filename = "sample.db"
pDB = int64(0)
res = cfunc64i( sqlite3_open, varptr64(filename), varptr64(pDB))
if res != SQLITE_OK : dialog "DBオープン失敗" : end
onexit goto *SQL_END
; テーブル作成
res = cfunc64i( sqlite3_exec, pDB, "CREATE TABLE IF NOT EXISTS MemoTable (ID INTEGER PRIMARY KEY, Memo)", NULL, NULL, varptr64(pErrMsg))
if res != SQLITE_OK : gosub *SQL_ERR_MES
; UI
msg = "オナカスイタ"
input msg, 380, 25
button goto "書き込み", *L_INS
stop
*L_INS
color:boxf:color 255,255,255:pos 0,48
; ここからクエリ実行
;----------------------------
pErrMsg = int64(0)
; インサート
res = cfunc64i( sqlite3_exec, pDB, strf("INSERT INTO MemoTable (Memo) VALUES ('%s')", msg), NULL, NULL, varptr64(pErrMsg))
if res != SQLITE_OK : gosub *SQL_ERR_MES
; セレクト
cbQuery = callback64_new( 4, *SQL_CB)
pCbQuery = callback64_getptr(cbQuery)
res = cfunc64i( sqlite3_exec, pDB, "SELECT ID, Memo FROM MemoTable ORDER BY ID DESC", pCbQuery, NULL, varptr64(pErrMsg))
if res != SQLITE_OK : gosub *SQL_ERR_MES
;----------------------------
stop
; コールバック
*SQL_CB ; int (*callback)(void*,int, char**, char**)
mes "-----------"
num = callback64_getprm(cbQuery, 1, RET_INT)
ppText = callback64_getprm(cbQuery, 2, RET_INT64)
dupptr64 pText, ppText, 8*num, 2
ppName = callback64_getprm(cbQuery, 3, RET_INT64)
dupptr64 pName, ppName, 8*num, 2
repeat num
dupptr64 txt, qpeek(pText, cnt*8), BUF_SIZE, 2
dupptr64 name, qpeek(pName, cnt*8), BUF_SIZE, 2
mes strf("%s: %s\t", name, txt) ; 今回は直接表示
loop
return
; エラーメッセージ
*SQL_ERR_MES
dupptr64 errMsg, pErrMsg, BUF_SIZE, 2
mes errMsg
cfunc64v sqlite3_free, pErrMsg
pErrMsg = int64(0)
return
; DBクローズ
*SQL_END
res = cfunc64i( sqlite3_close, pDB)
end
補足で、ファイル書き込み禁止にしたり、トークンに'など解析エラーがあった場合エラーメッセージ出るようにしてます。
また、直接クエリをインプットに打ち込めるようにして、リターンでクエリ結果を文字列で返すようにしても、
シンプルかつ色々使える形に出来そうですね。