VS2013 生成sqlite3动态连接库及sqlite3.dll的调用
一,生成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的源码:
- // sqlite3Test.cpp : 定义控制台应用程序的入口点。
- //
- #include "stdafx.h"
- #include <windows.h>
- //在stdafx.h文件中将sqlite3.h头文件引入
- #ifndef SQLITE3
- #define SQLITE3
- #include "sqlite3.h"
- //首先在stdafx.h头文件中加入显示数据库查询结果的回调函数:
- int showTableInfo(void *para, int n_column, char **column_value, char **column_name);
- #endif
- int _tmain(int argc, _TCHAR* argv[])
- {
- char *errMsg;
- int rc;
- sqlite3 *db;
- rc = sqlite3_open("manage1.db", &db);
- if (rc == SQLITE_OK)
- {
- MessageBox(NULL, _T("打开数据库成功!"), _T("消息"), MB_OK | MB_ICONWARNING);
- rc = sqlite3_exec(db, "create table if not exists user(ID integer,name varchar(32))", NULL, NULL, &errMsg);
- if (rc != SQLITE_OK)
- {
- printf("创建表失败,错误码:%d,错误原因:%sn", rc, errMsg);
- MessageBox(NULL, _T("创建表user失败!"), _T("错误"), MB_ICONWARNING);
- }
- rc = sqlite3_exec(db, "insert into user values('123','测试')", NULL, NULL, &errMsg);
- if (rc != SQLITE_OK)
- {
- MessageBox(NULL, _T("插入数据失败!"), _T("错误"), MB_ICONWARNING);
- }
- rc = sqlite3_exec(db, "select * from user", showTableInfo, NULL, &errMsg);
- if (rc != SQLITE_OK)
- {
- MessageBox(NULL, _T("查询失败!"), _T("错误"), MB_ICONWARNING);
- }
- }
- return 0;
- }
- int showTableInfo(void *para, int n_column, char **column_value, char **column_name)
- {
- int i;
- printf("记录包含%d个字段\n", n_column);
- for (i = 0; i<n_column; i++)
- {
- printf("字段名:%s >> 字段值:%s\n", column_name[i], column_value[i]);
- }
- printf("--------------------------------------n");
- return 0;
- }
下载地址:http://www.sqlite.org/download.html
VS2013 生成sqlite3动态连接库及sqlite3.dll的调用的更多相关文章
- c++调用matlab生成的Dll动态连接库
点击打开链接http://download.csdn.net/detail/nuptboyzhb/4228429 c++调用matlab生成的Dll动态连接库 实验平台: matlab 7.0(R ...
- Linux下的动态连接库及其实现机制
Linux与Windows的动态连接库概念相似,但是实现机制不同.它引入了GOT表和PLT表的概念,综合使用了多种重定位项,实现了"浮动代码",达到了更好的共享性能.本文对这些技术 ...
- Qt动态连接库/静态连接库创建与使用,QLibrary动态加载库
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt动态连接库/静态连接库创建与使用,QLibrary动态加载库 本文地址:https ...
- Linux 静态链接库和动态连接库
(0)文件夹 VMware 下安装Ubuntu的吐血经历 零基础学习Shell编程 Linux下的makefile的妙用 Linux调试神器 -- gdb 十分钟学会Python的基本类型 Linux ...
- 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包
前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”) ...
- c++本地动态连接库代码
c++本地动态连接库代码 1 #pragma once 2 #include "stdafx.h" 3 4 #ifdef PERSON_EXPORTS 5 #define PERS ...
- C编译: 动态连接库 (.so文件)(转摘)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在“纸上谈兵: 算法与数据结构”中,我在每一篇都会有一个C程序,用于实现算法和数据 ...
- C编译: 动态连接库 (.so文件)
转自:http://www.cnblogs.com/vamei/archive/2013/04/04/2998850.html 在“纸上谈兵: 算法与数据结构”中,我在每一篇都会有一个C程序,用于实现 ...
- 生成读取相关连接的物理地址的lib(动态导入库)和dll(动态链接库)
一.导出相关dll库 将原先的CmdInfoToPipe.h class后加入关键字 __declspec(dllexport) #ifndef NETINFO_CMDINFOTOPIPE_H_ #d ...
随机推荐
- Background Segment CNT
CNT简介 CNT算法是OpenCV Contrib 模块中的背景减除(Background segment)算法之一.相较于OpenCV提供的其他背景减 除算法,该算法具有运行速度快,检测精度高等优 ...
- BFS例题:A计划
ContribContrib/a11y/accessibility-menu.js 关于 BFS要点: 1.若为可化为的坐标系图形,可用结构体存储其x值,y值和步数.(一般开now 和 next ,n ...
- [BZOJ1060][ZJOI2007]时态同步(树形DP)
[我是传送门] 因为边权只能增加,那么设f[u]为u子树上从i出发到达某个叶节点的最大路径, 显然Ans应该增加f[u]-f[v]-e[i].w Code #include <cstdio> ...
- 总结 Date 2017.09.23
总结 Date 2017.09.23 <1>统计数字 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计 ...
- SVN 的基本用法
克隆远程库 # svn checkout $URL --username=$userName 显示库信息 # svn info 显示库状态 # svn status 将文件纳入版本管理 # svn a ...
- NC-瑞士军刀NetCat
NC——Telnet/Banner 连接之后可以命令互动,比如POP3\SMTP\HTTP等协议命令 root@kali:/# nc -v pop3..com //-v详细显示 DNS fwd/rev ...
- 3,Flask 中的模板语言 Jinja2 及 render_template 的深度用法
Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符串,用于传递到前端 S ...
- ITIBB原创,互联网首部自媒体小说《1024伐木累》-小白篇之入职-总章节一
小序 IT人不懂爱?代码汪是小白?又有谁,懂我情怀? 逗比青年,背上行囊,懵懵懂懂闯帝都!前途似海,来日方长! 青春无梦妄少年!认定就作,不平就说,碰撞火花,如此绚烂…… IT人有比格?其实,那是顽强 ...
- 《数据结构与算法分析:C语言描述》复习——第七章“哈希”——哈希表
2014.06.22 12:36 简介: 哈希是一种数学思想,将不定长数据通过函数转换为定长数据.不定长数据通常意味着碎片化,动态分配内存等等影响存储和性能的因素.当这个定长数据是一个无符号整数时,可 ...
- Object Pascal中文手册 经典教程
Object Pascal 参考手册 (Ver 0.1)ezdelphi@hotmail.com OverviewOverview(概述)Using object pascal(使用 object p ...