wince6.0移植SQLite生成LIB、DLL

本文介绍了如何在Windows CE 6.0上移植SQLite,包括从SQLite官网下载源码,使用VS2005创建DLL项目,修改源代码,添加模块定义文件,生成库和DLL。接着,创建测试项目进行数据库操作,如创建表、插入记录和查询。在遇到模拟器调试错误时,通过调整项目设置解决了远程调试问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 去SQLite官网http://www.sqlite.org/download.htm下载最新的source code

2.  在VS2005下新建一个Win32智能设备项目,选择相应的SDK,并选择应用程序类型为DLL(空项目)


3.  将sqlite-amalgamation-201401042000.zip解压后的sqlite3.c、sqlite3.h文件拷贝到工程目录下并添加至工程目录

 

4.在预处理中增SQLITE_ENABLE_RTREE和SQLITE_ENABLE_COLUMN_METADATA宏定义

 

5.将源文件sqlite3.c中 14660行localtime_s替换成_localtime64_s


6. 在SQLite官网上下载sqlite-dll-win32-x86-XXXXXX.zip文件,解压后将目录下的sqlite3.def文件拷贝到DLL工程目录,在项目属性--链接器--输入--模块定义文件中添加sqlite3.def


7.编译相应目录下生成lib、dll文件


使用测试程序测试

1.当前项目下新建立项目SQLite_test,同时设置新项目依赖于SQLite



2.SQLite_test.cpp文件中添加如下代码:

// SQLite_test.cpp : 定义应用程序的入口点。
//


#include "stdafx.h"
#include "SQLite_test.h"
#include <windows.h>
#include <commctrl.h>
#include "sqlite3.h"




// sqlite3的回调函数
int SQLiteQueryResultCallBack( void * para, int n_column, char ** column_value, char ** column_name )
{
printf( "******************************\n" );
printf("includ %d id\n", n_column );
for(int i = 0 ; i < n_column; i ++ )
{
printf( "name:%s value:%s\n", column_name[i], column_value[i] );
}
printf( "******************************\n" );
Sleep(5000);
return 0;
}


int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPTSTR    lpCmdLine,
                   int       nCmdShow)
{
#if 1
sqlite3 * db = NULL; //声明sqlite关键结构指针
int result;
// 打开或创建数据库
result = sqlite3_open("mydb.db", &db );
if( result != SQLITE_OK )
{
//数据库打开失败
return -1;
}
char * errmsg = NULL;
// 数据库操作代码




// 创建一个测试表,表名叫 MyTable,有2个字段: ID 和 name。其中ID是一个自动增加的类型,以后insert时可以不去指定这个字段,它会自己从0开始增加
result = sqlite3_exec( db, "create table MyTable( ID integer primary key autoincrement, name nvarchar(32) )", NULL, NULL, &errmsg );
if(result != SQLITE_OK )
{
printf("创建表失败,错误码:%d,错误原因:%s\n", result, errmsg );
}
// 插入记录
result = sqlite3_exec( db, "insert into MyTable( name ) values ( 'zhangshan' )", 0, 0, &errmsg );
if(result != SQLITE_OK )
{
printf("插入记录失败,错误码:%d,错误原因:%s\n", result, errmsg );
}
// 插入记录
result = sqlite3_exec( db, "insert into MyTable( name ) values ( 'lisi' )", 0, 0, &errmsg );
if(result != SQLITE_OK )
{
printf("插入记录失败,错误码:%d,错误原因:%s\n", result, errmsg );
}




// 开始查询数据库
result = sqlite3_exec( db, "select * from MyTable", SQLiteQueryResultCallBack, NULL, &errmsg );
// 关闭数据库
sqlite3_close( db );
#endif
return 0;
}

3.编译运行,模拟器出现如下错误

 4.此问题解决方法如下:

将dll项目SQLite的属性页中调试中的远程可执行文件、部署中的远程目录设置和SQLite_test(执行文件)项目中对应项一样

具体可以参照 使用vs2005进行(wince)DLL源码调试 :

http://blog.chinaunix.net/uid-24866372-id-2129467.html

5.设置完成之后编译即可。


其它参照帖子:

WINCE下使用SQLite数据库

http://blog.youkuaiyun.com/firehood_/article/details/8129612



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值