delphi7 怎么调用sqlite3.dll中的函数
delphi吧
全部回复
仅看楼主
level 4
qq511542629 楼主
sqlite3中的int sqlite3_open(const char *filename , sqlite3 **ppDb),在delphi7中怎么调用啊,主要是第二个参数sqlite3 **ppDb看不懂,应该传入什么类型的啊。我是小白,刚刚开始自学。请知道的教教我,多谢
2016年10月15日 03点10分 1
level 1
sqlite是c语言写的,开源的小型数据库。官网可以下到源代码(不带加密功能的),里面包含API的格式。sqlite3 是数据库定义的数据结构,**ppDb是个指针的指针,原文定义是:OUT: SQLite db handle,所以delphi定义一个无类型指针就可以,比如db: pointer; 可以很容易搜索到Delphi与C语言类型转换对照表。有很多组件可以操作sqlite数据库(部分收费),比如UniDAC、zeoslib(开源)、DISQLite3、sivak3,高版本Delphi自带的FireDAC、dbExpress等。这里有个各语言封装列表:http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers
2016年10月16日 03点10分 2
level 4
qq511542629 楼主
@三条大汉
非常感谢,弄了还是搞不定,请帮我看看
procedure TForm1.Button1Click(Sender: TObject);
var
dll:cardinal;
pp:function(x:pchar;y:pointer):integer;stdcall;
cc:function(x:pointer):integer;stdcall;
sqlite3:pointer;
begin
sqlite3:=nil;
dll:=LoadLibrary(pchar('c:/sqlite/sqlite3.dll'));
if dll<>0 then
begin
@pp:=GetProcAddress(dll,'sqlite3_open');
@cc:=getprocaddress(dll,'sqlite3_close');
if @pp<>nil then
begin
pp(pchar('d:/112.db'),@sqlite3); //估计这里错了
cc(sqlite3); //估计这里错了,但我不知道怎么弄了,试了很多了
end;
end;
freelibrary(dll);
end;
运行可以创建出数据库了,但是提示错误,信息如下
2016年10月16日 12点10分 3
level 4
qq511542629 楼主
粘贴代码好像不太好观看,再贴个图
2016年10月16日 12点10分 4
C语言编译的dll调用约定默认是cdecl,把stdcall改成cdecl。SQLite3要求字符参数编码是UTF8,中文时会暴露问题,所以路径最好转换一下,比如用AnsiToUtf8()。Windows下路径标准应该用反斜杠,正斜杠也可以读写。
2016年10月17日 03点10分
调用约定从stdcall改成cdecl。SQLite要求编码是UTF8,中文时会暴露问题,最好转换一下。路径最好用反斜杠,正斜杠也可以读写。
2016年10月18日 14点10分
好的,搞定了,非常感谢
2016年10月19日 12点10分
level 1
C语言dll调用约定默认是cdecl,把stdcall改成cdecl。SQLite要求字符参数编码是UTF8,中文时会暴露问题,所以路径最好转换一下,比如用AnsiToUtf8。Windows下路径最好用反斜杠,正斜杠也可以读写。
2016年10月17日 05点10分 10
1