Pour commencer, je voudrais remercier blackhorus pour ses indications qui m'ont permis d'éclaicir le comment du pourquoi concernant les points suivant :
utiliser un fichier .DEF pour créer un fichier .LIB
et inclure ce fichier .LIB dans un projet VC++ 6
Voici le parcours qui m'a amené à rencontrer ces petits problèmes, je veux utiliser SQLite (
www.sqlite.org)
pour faire une petite application de gestion de notes et de dossiers personnelles.
J'ai donc téléchargé :
- les sources pour Win32 (
http://www.sqlite.org/sqlite-source-3_2_7.zip) à titre de références
- sqlitedll.zip (
http://www.sqlite.org/sqlitedll-3_2_7.zip)
- sqlite3.exe (
http://www.sqlite.org/sqlite-3_2_7.zip)
lu les instruction pour utiliser SQLite avec Visual C++ 6 (
http://www.sqlite.org/cvstrac/wiki?p=HowToCompile) qui mentionne ceci :
J'ai créé le répertoire suivant : C:\test_SQLite
J'ai copié dans ce répertoire les fichiers suivants :
- sqlite3.def
- sqlite3.dll
- sqlite3.exe
ensuite je créé un dossier source dans lequel j'extrait le contenu de sqlite-source-3_2_7.zip.
Par la suite j'ai utilisé cette commande dans un prompt DOS :
C:\test_SQLite>link -lib -machine:X86 -def:sqlite3.def -out:sqlite3.lib
(merci blackhorus)
pour obtenir le fichier sqlite3.lib et sqlite3.exp.
Ensuite je démarre VC++ 6 et je créé un nouveau projet Win32 Console Application
que je nomme SQLite_Exemple dont le répertoire de création se trouve sous C:\test_SQLite.
Je choisi l'option Empty Project et je clique finish.
J'ai créé un fichier test_SQLite.c avec le code suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc, char **argv){
sqlite3 *db;
char *zErrMsg = 0;
int rc;
if( argc!=3 ){
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
exit(1);
}
rc = sqlite3_open(argv[1], &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
}
sqlite3_close(db);
return 0;
} |
Dans Projects->Settings je choisi Settings For : All Configurations (coin haut gauche) et ensuite :
- Onglet C/C++ -> Category : Preprocessor -> Additionnal include directories : c:/test_SQLite/source.
- Onglet Link -> Category : Input -> Objects/library modules -> j'ajoute sqlite3.lib à la toute fin
-> Additional library path -> c:/test_SQLite/
Maintenant je peux construire l'exécutable.
Pour fin de test, j'exécute dans un prompt DOS les commandes suivantes :
1 2 3 4 5
| C:\test_SQLite\sqlite3 test.db "create table t1 (t1key INTEGER PRIMARY KEY,data TEXT,num double,timeEnter DATE);
C:\test_SQLite\sqlite3 test.db "insert into t1 (data,num) values ('Exemple de données',3);"
C:\test_SQLite\sqlite3 test.db "insert into t1 (data,num) values ('Plus de données',6);"
C:\test_SQLite\sqlite3 test.db "insert into t1 (data,num) values ('Encore plus de données',9);" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| C:\test_SQLite\SQLite_Exemple\Debug\SQLite_Exemple.exe test.db "select * from t1"
t1key = 4
data = Exemple de données
num = 3
timeEnter = NULL
t1key = 5
data = Plus de données
num = 6
timeEnter = NULL
t1key = 6
data = Encore plus de données
num = 9
timeEnter = NULL |
Je copie sqlite3.dll dans le même répertoire que mon nouvel exec et maintenant je suis prêt à tester ma mini application en entrant la commande suivante dans un prompt DOS :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| C:\test_SQLite\SQLite_Exemple\Debug\SQLite_Exemple.exe C:\test_SQLite\test.db "select * from t1"
t1key = 4
data = Exemple de données
num = 3
timeEnter = NULL
t1key = 5
data = Plus de données
num = 6
timeEnter = NULL
t1key = 6
data = Encore plus de données
num = 9 |
Et maintenant tout fonctionne
MERCI
MERCI
MERCI
Partager