一,生成sqlite3动态连接库
1,去sqlite官网上下载最近的sqlite源码包,解压后得到四个文件:shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h
此处还需要sqlite3.def文件,它在sqlite官方生成的dll包中,下载下来,解压即可。
其中,shell.c文件是做来生成exe可执行文件用的。
2,打开vs2008 新建sqlite3的非mfc的DLL项目,这里只需要建立空的项目即可。
3,将上面非shell.c的四个文件复制动sqlite3项目工程的目录下

4,将sqlite3.h,sqlite3ext.h两文件添加到项目的头文件下面,把sqlite3.c,sqlite3.def添加到项目的源文件下面。

5,编译即可以得来sqlite3.dll文件
   注意,此时,并未有sqlite3.lib生成,解决方法如下:

6,再次编译:
 出现如下错误:
1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_database_name
1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_database_name16
1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_origin_name
1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_origin_name16
1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_table_name
1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_table_name16
1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_rtree_geometry_callback
1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_table_column_metadata
1>F:C++_Programsqlite3Debugsqlite3.lib : fatal error LNK1120: 8 个无法解析的外部命令

解决办法是:
 修改项目属性的配置,在预处理器定义中添加SQLITE_ENABLE_COLUMN_METADATA(配置属性-> c/c++ -> 预处理器 -> 预处理器定义)
再次编译,此时仍然会报一个:
1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_rtree_geometry_callback
的错误,解决办法是:
在预处理器定义中添加:SQLITE_ENABLE_RTREE
再次编译即会成功生成sqlite3.dll和sqlite3.lib文件

二,生成sqlite3可执行文件
若要生成sqltie3.exe可执行文件,只需新建win32控制台空项目,要将 sqlite3.c,sqlite3.h,shell.c引入源文件中,如下:
[转载]VS2008 <wbr>生成sqlite3动态连接库及sqlite3.dll的调用
生成解决方案,就能得到我们需要的sqlite3.exe文件

三,在C++项目中引用sqlite3的动态连接库
1,新建测试工程sqlite3_Test:
2,将上面生成的sqlite3.dll文件放到debug目录中,在项目目录中引入sqlite3.lib文件,
  并把sqlite3.h加入到项目头文件中
3,在stdafx.h文件中将sqlite3.h头文件引入
#ifndef SQLITE3
#define SQLITE3
#include "sqlite3.h"
#endif
4,在sqlite3_test.cpp源文件中,写入sqltie3数据库操作:
首先在stdafx.h头文件中加入显示数据库查询结果的回调函数:
int showTableInfo(void *para,int n_column,char **column_value,char **column_name);

修改Sqlite3_Test.cpp的源码:

  1. // sqlite3Test.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <windows.h>
  5. //在stdafx.h文件中将sqlite3.h头文件引入
  6. #ifndef SQLITE3
  7. #define SQLITE3
  8. #include "sqlite3.h"
  9. //首先在stdafx.h头文件中加入显示数据库查询结果的回调函数:
  10. int showTableInfo(void *para, int n_column, char **column_value, char **column_name);
  11. #endif
  12. int _tmain(int argc, _TCHAR* argv[])
  13. {
  14. char *errMsg;
  15. int rc;
  16. sqlite3 *db;
  17. rc = sqlite3_open("manage1.db", &db);
  18. if (rc == SQLITE_OK)
  19. {
  20. MessageBox(NULL, _T("打开数据库成功!"), _T("消息"), MB_OK | MB_ICONWARNING);
  21. rc = sqlite3_exec(db, "create table if not exists user(ID integer,name varchar(32))", NULL, NULL, &errMsg);
  22. if (rc != SQLITE_OK)
  23. {
  24. printf("创建表失败,错误码:%d,错误原因:%sn", rc, errMsg);
  25. MessageBox(NULL, _T("创建表user失败!"), _T("错误"), MB_ICONWARNING);
  26. }
  27. rc = sqlite3_exec(db, "insert into user values('123','测试')", NULL, NULL, &errMsg);
  28. if (rc != SQLITE_OK)
  29. {
  30. MessageBox(NULL, _T("插入数据失败!"), _T("错误"), MB_ICONWARNING);
  31. }
  32. rc = sqlite3_exec(db, "select * from user", showTableInfo, NULL, &errMsg);
  33. if (rc != SQLITE_OK)
  34. {
  35. MessageBox(NULL, _T("查询失败!"), _T("错误"), MB_ICONWARNING);
  36. }
  37. }
  38. return 0;
  39. }
  40. int showTableInfo(void *para, int n_column, char **column_value, char **column_name)
  41. {
  42. int i;
  43. printf("记录包含%d个字段\n", n_column);
  44. for (i = 0; i<n_column; i++)
  45. {
  46. printf("字段名:%s  >> 字段值:%s\n", column_name[i], column_value[i]);
  47. }
  48. printf("--------------------------------------n");
  49. return 0;
  50. }

下载地址:http://www.sqlite.org/download.html

VS2013 生成sqlite3动态连接库及sqlite3.dll的调用的更多相关文章

  1. c++调用matlab生成的Dll动态连接库

    点击打开链接http://download.csdn.net/detail/nuptboyzhb/4228429 c++调用matlab生成的Dll动态连接库 实验平台:   matlab 7.0(R ...

  2. Linux下的动态连接库及其实现机制

    Linux与Windows的动态连接库概念相似,但是实现机制不同.它引入了GOT表和PLT表的概念,综合使用了多种重定位项,实现了"浮动代码",达到了更好的共享性能.本文对这些技术 ...

  3. Qt动态连接库/静态连接库创建与使用,QLibrary动态加载库

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt动态连接库/静态连接库创建与使用,QLibrary动态加载库     本文地址:https ...

  4. Linux 静态链接库和动态连接库

    (0)文件夹 VMware 下安装Ubuntu的吐血经历 零基础学习Shell编程 Linux下的makefile的妙用 Linux调试神器 -- gdb 十分钟学会Python的基本类型 Linux ...

  5. 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包

    前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”) ...

  6. c++本地动态连接库代码

    c++本地动态连接库代码 1 #pragma once 2 #include "stdafx.h" 3 4 #ifdef PERSON_EXPORTS 5 #define PERS ...

  7. C编译: 动态连接库 (.so文件)(转摘)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在“纸上谈兵: 算法与数据结构”中,我在每一篇都会有一个C程序,用于实现算法和数据 ...

  8. C编译: 动态连接库 (.so文件)

    转自:http://www.cnblogs.com/vamei/archive/2013/04/04/2998850.html 在“纸上谈兵: 算法与数据结构”中,我在每一篇都会有一个C程序,用于实现 ...

  9. 生成读取相关连接的物理地址的lib(动态导入库)和dll(动态链接库)

    一.导出相关dll库 将原先的CmdInfoToPipe.h class后加入关键字 __declspec(dllexport) #ifndef NETINFO_CMDINFOTOPIPE_H_ #d ...

随机推荐

  1. python创建字典

    创建: {x:x**2 for x in (2,4,6)} dict(xjm=110,lxh=119,pzq=120) dict([('a',1),('b',2),('c',3)])

  2. setBackgroundResource和setImageResource的区别

    setBackgroundResource是设置view的背景图片 setImageResource是设置ImageView的图片 对于一个imagevewButton来说,你既可以setBackgr ...

  3. Maven学习 (二) Eclipse 上安装 Maven3插件

    eclipse 安装插件的方式最常见的有两种: 1. 一种是在线安装,这貌似是用的最多的,就是:Help  -->  Install New Software,然后输入 HTTP 地址来安装,但 ...

  4. 能ping通网络,也正常连接,就是打不开网页,无法访问网络

    netsh winsock reset命令,作用是重置 Winsock 目录.如果一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就需要用netsh winsock reset命令 ...

  5. ADB连接手机遇到的问题:list of devices attached

    今天工作时想尝试一下使用ADB无线连接手机,结果遇到了下面这样的问题,浪费了几十分钟的时间,挺闹心的,因此想分享出来... 首先 第一步:使用USB数据线连接手机,手机弹出选项时,选择仅充电,然后wi ...

  6. 【JAVA进阶】——myEclipse连接mysql启动数据库服务

    背景: DRP项目要求使用Oracle数据库,但目前由于种种原因,暂时还装不了Oracle.但也不能闲着啊,就拿mysql来试试.安装完mysql以后,使用myEclipse连接数据库,就一直报错,报 ...

  7. Scala 基础(3)—— 基础类型和基础操作

    1. Scala 的一些基础类型 Scala 提供了 8 种基础类型,对应 Java 的 8 种基本数据类型. 其中包括: 整数类型:Byte, Short, Int, Long, Char 浮点类型 ...

  8. Python列表及元组操作

    #列表(一组有序数据的组合就是列表) #创建列表 #空列表 var = list()#var = [] print(var,type(var)) #具有多个元素的列表 var = ['风','水',' ...

  9. HTML5 localStorage与document.domain设置问题

    localStorage的写入和读取,不能跨子域,否则在一些移动端浏览器上,会出现读取不到的情况. 最近开发一个移动端的播放记录功能,在pc端和android版的chrome测试很顺利通过了,但后来进 ...

  10. synflood 模拟工具

    synflood 模拟工具 来源 https://blog.csdn.net/wuzhimang/article/details/54581117 因项目需要,要对主流的几家抗DDoS设备做测评,当然 ...