将sqlite3编译成给WINCE使用的DLL,并封装成C++的步骤(使用VS2005)

将sqlite3编译成给WINCE使用的DLL,并封装成C++的步骤(使用VS2005),第1张

概述 利用VS2005编译SQLite3.5.1   1, 到http://sourceforge.net/projects/sqlite-wince/files/下载 sqlite-wince-3.x下面的sqlite-wince-3.3.5   2. 创建一个Win32 Smart Device Project,项目名字为sqlite3,Application Type选择DLL,创建项目完成  利用VS2005编译sqlite3.5.1

1,到http://sourceforge.net/projects/sqlite-wince/files/下载sqlite-wince-3.x下面的sqlite-wince-3.3.5

2. 创建一个Win32 Smart Device Project,项目名字为sqlite3,Application Type选择DLL,创建项目完成后,将所有sqlite-wince-3.3.5下面的文件拷贝到项目的目录(除了tclsqlite.cshell.c这两个文件)

3. 设置project的一些属性,


首先将sqlite3.cpp改名为sqlite.c,并注释掉整个文件里面的代码,包括include的头文件,因为我们待会儿会按照C语言来编译,而不是C++,如果按照C++编译,会有很多语法错误,当然,你也可以逐条修改语法错误,然后编译(这个我没试过,应该没问题);另外,从项目中删掉stdafx.cpp,这个文件没用。

其次,将编译模式改为c模式(TC)。位置:Project->PropertIEs->Configuration PropertIEs->C/C++->Advanced->Compile As

再次,Project->PropertIEs->C/C++->@R_316_3013@ header->Create/Use @R_316_3013@ header: Not using @R_316_3013@ header

再次,Project->PropertIEs->linker->input->Module DeFinition file:输入“sqlite3.def”

再次,有可能会出现unresolved external symbol @__security_check_cookie@4这个链接错误,做如下 *** 作即可:Project->PropertIEs->C/C++->Code Generation, Buffer Security Check选择No

上述过程完成后即可得到一个sqlite3.lib和sqlite3.dll

4. 如果想使用c++封装,可以到下面下载:http://softvoile.com/development/CppSQLite3U/

下面的代码是测试(代码是转载的)

4> 有了 sqlite DLL 及 Cppsqlite3U 后,便可以很方便地使用 sqlITE :(步骤3中,a链接页画下就有DEMO)

主要代码如下:

#define file_DB_nameTEXT("unitech.db")

// 获取程序当前路径
voID GetCurrentDirectory(CString & szPath)
{
wchar_tpBuf[
256 ];
Getmodulefilename(NulL,pBuf,
sizeof (pBuf) / sizeof (wchar_t));
szPath
= pBuf;
szPath
= szPath.left(szPath.ReverseFind( ' // ' ) + 1 );
}

voID CDemo2Dlg::Onbutton1()
{
CStringstrDbPath;
GetCurrentDirectory(strDbPath);
strDbPath
+= file_DB_name;

Cppsqlite3DBdb;
try
{
// 打开或新建一个数据库
db.open(strDbPath);

// 判断表名是否存在
if (db.tableExists(L " tblTest " ))
{
AfxMessageBox(L
" table:tblTestisexisted! " );
}
else // 不存在
{
AfxMessageBox(L
" table:tblTestnotexisted! " );
// 新建表
db.execDML(L " createtabletblTest(empnovarchar(20),empnamevarchar(20)) " );
}

// 插入一笔记录
db.execDML(L " insertintotblTestvalues('编号','姓名') " );
// 插入一笔记录
db.execDML(L " insertintotblTestvalues('精瑞电脑','Answer') " );

// 删除一笔记录
db.execDML(L " deletefromtblTestwhereempno='编号' " );

// 插入10笔记录(使用事务)
TCHARbuf[ 256 ];
db.execDML(L
" begintransaction; " );
for ( int i = 0 ;i < 10 ;i ++ )
{
memset(buf,
0 , sizeof (buf));
wsprintf(buf,L
" insertintotblTestvalues('no%d','name%d'); " ,i,i);
db.execDML(buf);
}
db.execDML(L
" committransaction; " );

// 更新一笔记录
db.execDML(L " updatetblTestsetempname='answer'whereempno='no1' " );

// 获取总笔数
int count = db.execScalar(L " selectcount(*)fromtblTest; " );
TCHARszCount[
50 ];
memset(szCount,
sizeof (szCount));
wsprintf(szCount,L
" Count:%d " ,count);
AfxMessageBox(szCount);

// 获取每一笔
Cppsqlite3queryq = db.execquery(L " select*fromtblTest " );
while ( ! q.eof())
{
AfxMessageBox(q.fIEldValue(
0 ));
q.nextRow();
}
q.finalize();

db.close();
AfxMessageBox(L
" OK " );
}
catch (Cppsqlite3Exceptionex) { AfxMessageBox(ex.errorMessage()); } }
总结

以上是内存溢出为你收集整理的将sqlite3编译成给WINCE使用的DLL,并封装成C++的步骤(使用VS2005)全部内容,希望文章能够帮你解决将sqlite3编译成给WINCE使用的DLL,并封装成C++的步骤(使用VS2005)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1171550.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存