SqlLite 自定义函数问题

pzx521521 2017-08-14 10:59:38
原型函数如下:
int sqlite3_create_function(

sqlite3 *, //database handle

const char *zFunctionName, //自定义函数名

int nArg, //参数个数,如果为-1则可接受任意数量参数

int eTextRep, //传入参数编码形式

void* pApp, //传入参数指针,可以通过 sqlite3_user_data()方法获取

void (*xFunc)(sqlite3_context*,int,sqlite3_value**),

void (*xStep)(sqlite3_context*,int,sqlite3_value**),

void (*xFinal)(sqlite3_context*)

);
eTextRep的可能取值如下:

#define SQLITE_UTF8 1

#define SQLITE_UTF16 2

#define SQLITE_UTF16BE 3

#define SQLITE_UTF16LE 4

#define SQLITE_ANY 5

delphi定义函数:
function sqlite3_create_function(db: TSQLiteDB; FunctionName: PAnsiChar; nArg, eTextRep:Integer;
pApp ,xFunc, xStep, xFinal: Pointer):integer; stdcall; external 'sqlite3.dll';
自定义函数:
procedure test(a: string);
begin
a := a +'test';
end;
调用函数:
// DataBase创建
FDataBase.FileName := Fpath;
FDataBase.Open();
test := sqlite3_create_function(FDataBase, 'test', 1, SQLITE_ANY, nil, @test, nil, nil);
编译OK FDataBase OK 查dll 有该函数
换sqlite3_create_function_V2 仍然不可以
都会报内存错误
帮忙看一下
...全文
410 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
pzx521521 2018-11-29
  • 打赏
  • 举报
回复
https://github.com/pzx521521/Sqlite3_Inject_Function_Delphi 使用示例
pzx521521 2017-09-04
  • 打赏
  • 举报
回复
已解决 自定义函数有问题 自定义函数如下: procedure SLDecryptText(sqlite3_context: Psqlite3_context; ArgIndex: Integer; ArgValue: PPsqlite3_value); VAR theStr: string; begin theStr := TSQLiteFunctions.ValueAsString(ArgValue^); // 解密并返回 theStr := AESDecrypt(theStr); TSQLiteFunctions.ResultAsString(sqlite3_context, theStr); end; 注册进Sqlite的函数如下: FSqliteFunctions := TSQLiteFunctions.Create(FSqliteDatabase); FSqliteFunctions.AddScalarFunction('SLDecryptText', 1, SLDecryptText); 以上是用第三方的Sqlite包,没有的静态注册的就不写了 有问题QQ 460067960
zhoufs 2017-08-19
  • 打赏
  • 举报
回复
sqlite3的版本是个问题。 有些莫名其妙的问题,研究半天,到最后你才发现:是sqlite3的版本所致。

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧