一,生成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. 006---Django静态文件配置

    静态文件:Js.Css.Fonts.Image等 这个不难.在setting.py文件加一行 # 别名 用户在url地址栏输入127.0.0.1:8000/static/文件 可以直接访问static ...

  2. [CodeForces - 296D]Greg and Graph(floyd)

    Description 题意:给定一个有向图,一共有N个点,给邻接矩阵.依次去掉N个节点,每一次去掉一个节点的同时,将其直接与当前节点相连的边和当前节点连出的边都需要去除,输出N个数,表示去掉当前节点 ...

  3. Redis和Mecahe的简介

    Memcache介绍 概念:Memcache是一个高性能,分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等. ...

  4. 【UE4】二十三、UE4笔试面试题

    在CSDN博客看到的,带着这些问题,多多留意,正所谓带着问题学习. 一. 1.Actor的EndPlay事件在哪些时候会调用? 2.BlueprintImplementableEvent和Bluepr ...

  5. 【转帖】置高并发jdbc连接池

    简单的MySQL连接池 <Resource type="javax.sql.DataSource" name="jdbc/TestDB" factory= ...

  6. 基于CSS多列实现瀑布流

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. AOP的两种实现方式

    技术交流群 :233513714 AOP,面向切面编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.    Aspect Oriented Progr ...

  8. echarts 地图的背景色和各省颜色配置以及地图饼图联动

    myChart.on(ecConfig.EVENT.MAP_SELECTED, function (param) { var selected = param.selected; var str = ...

  9. Apache Spark 2.2.0 中文文档

    Apache Spark 2.2.0 中文文档 - 快速入门 | ApacheCN Geekhoo 关注 2017.09.20 13:55* 字数 2062 阅读 13评论 0喜欢 1 快速入门 使用 ...

  10. react书写规范小记

    1.对齐方式 //如果没有属性,在自闭和标签前添加一个空格: <Footer /> //如果可以放在一行,放在一行上即可: <Footer bar="bar" / ...