VS 2013はsqlite 3動的接続ライブラリおよびsqlite 3を生成する.dllの呼び出し


一、sqlite 3動的接続ライブラリの生成
1、sqliteの公式サイトに行って最近のsqliteのソースコードの包みをダウンロードして、解凍した後に4つのファイルを得ます:shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h
ここではsqlite 3も必要です.defファイルは、sqliteで公式に生成されたdllパッケージからダウンロードし、解凍すればいい.
その中でcファイルはexe実行可能ファイルを生成するために使用されます.
2,vs 2008にsqlite 3を新設したmfc以外のDLLプロジェクトを開きます.ここでは空のプロジェクトを構築するだけです.
3、上をshellではありません.cの4つのファイルコピー動sqlite 3プロジェクトプロジェクトのディレクトリの下
4,sqlite 3.h,sqlite3ext.h 2つのファイルをプロジェクトのヘッダファイルの下に追加し、sqlite 3.c,sqlite3.defはプロジェクトのソースファイルの下に追加されます.
5,コンパイルはsqlite 3を得ることができる.dllファイル注意、この場合sqlite 3はありません.lib生成、解決方法は以下の通りです.
6,再コンパイル:次のエラーが発生しました:1>sqlite 3.def:error LNK 2001:解析できない外部シンボルsqlite 3_column_database_name 1>sqlite3.def:error LNK 2001:解析できない外部シンボルsqlite 3_column_database_name16 1>sqlite3.def:error LNK 2001:解析できない外部シンボルsqlite 3_column_origin_name 1>sqlite3.def:error LNK 2001:解析できない外部シンボルsqlite 3_column_origin_name16 1>sqlite3.def:error LNK 2001:解析できない外部シンボルsqlite 3_column_table_name 1>sqlite3.def:error LNK 2001:解析できない外部シンボルsqlite 3_column_table_name16 1>sqlite3.def:error LNK 2001:解析できない外部シンボルsqlite 3_rtree_geometry_callback 1>sqlite3.def:error LNK 2001:解析できない外部シンボルsqlite 3_table_column_metadata 1>F:C++_Programsqlite3Debugsqlite3.lib:fatal error LNK 1120:8個の解析不可能な外部コマンド解決方法は、プロジェクト属性の構成を変更し、プリプロセッサ定義にSQLITE_を追加することである.ENABLE_COLUMN_METADATA(構成プロパティ->c/c++->プリプロセッサ->プリプロセッサ定義)が再コンパイルされ、1>sqlite 3が報告されます.def:error LNK 2001:解析できない外部シンボルsqlite 3_rtree_geometry_callbackのエラーです.解決策は、プリプロセッサ定義にSQLITE_を追加することです.ENABLE_RTREEの再コンパイルはsqlite 3の生成に成功する.dllとsqlite 3.libファイル
二、sqlite 3実行可能ファイルを生成するsqltie 3を生成する.exe実行可能ファイルは、win 32コンソールの空のプロジェクトを新規作成するだけで、sqlite 3.c,sqlite3.h,shell.cソースファイルに以下のように導入する:[転載]VS 2008sqlite 3動的接続ライブラリおよびsqlite 3を生成する.dllの呼び出し生成ソリューションは、必要なsqlite 3を得ることができます.exeファイル3、C++プロジェクトでsqlite 3の動的接続ライブラリ1を参照し、テストエンジニアリングsqlite 3_を新規作成Test:2,上で生成したsqlite 3.dllファイルはdebugディレクトリに格納され、プロジェクトディレクトリにsqlite 3が導入される.libファイル、sqlite 3.hプロジェクトヘッダファイルに3を追加するstdafx.hファイルにsqlite 3を格納する.hヘッダファイル導入#ifndef SQLITE 3#define SQLITE 3#include"sqlite 3.h"#endif 4、sqlite 3_test.cppソースファイルにsqltie 3データベースを書き込む操作:まずstdafx.hヘッダファイルにデータベースクエリ結果を表示するコールバック関数を加える:int showTable Info(void*para,int n_column,char**column_value,char**column_name);Sqlite 3_の変更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_column); for (i = 0; i<n_column; i++) { printf(" :%s >> :%s
", column_name[i], column_value[i]); } printf("--------------------------------------n"); return 0; }

ダウンロード先:http://www.sqlite.org/download.html