IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Problème avec WinAPI + sqlite


Sujet :

Windows

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 30
    Par défaut Problème avec WinAPI + sqlite
    Saluts,

    Windows XP Pro + Pelles C Compiler for Windows.
    Nous sommes débutants de C.

    (note: nous avons mis à jour le fichier .zip annexé ici; s'il vous plaît, lisez aussi le message suivant, avec plus d'information sûr l'isolement du problème)

    Nous pensons que c'est une question que peut-être résolu dans le forum de Win32, mais, si vous pensez que c'est specifique de sqlite, s'il vous plaît changez ce topique...
    C'est que, quand nous testons le code du sqlite3 dans notre compilateur C, dans un projet de Console, ça fonctionne bien (la fonction sqlite3_exec est externe, du header sqlite3.h. Le programme est linké avec sqlite3.lib):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <sqlite3.h>
    
    sqlite3 *db;
    void OPENDY(void);
    
    static int callback(void *NotUsed, int argc, char **argv, char **azColName){
      char autepute[2560];
      sprintf(autepute, "%s", argv[1]);
      printf("%s\n", autepute);
      return 0;
    }
    int main(int argc, char *argv[])
    {
    	int ret;
    	ret = sqlite3_open("../asasa/dict.db", &db);
    	if (ret){
    		printf("ERRUS\n");
    	}
    	char *zErrMsg;
    	int rc = sqlite3_exec(db, "select * from a where a = 'asasa'", callback, 0, &zErrMsg);
    	rc = sqlite3_exec(db, "select * from a where a = 'asas'", callback, 0, &zErrMsg);
    	rc = sqlite3_exec(db, "select * from a where a = 'a'", callback, 0, &zErrMsg);
    	rc = sqlite3_exec(db, "select * from a where a = 'asa'", callback, 0, &zErrMsg);
    	rc = sqlite3_exec(db, "select * from a where a = 'sa'", callback, 0, &zErrMsg);
    	rc = sqlite3_exec(db, "select * from a where a = 'as'", callback, 0, &zErrMsg);
    	rc = sqlite3_exec(db, "select * from a where a = 'asa'", callback, 0, &zErrMsg);
    	rc = sqlite3_exec(db, "select * from a where a = 'a'", callback, 0, &zErrMsg);
    	rc = sqlite3_exec(db, "select * from a where a = 'sasa'", callback, 0, &zErrMsg);
    	sqlite3_close(db);
        printf("cavasio %i\n", 1);
        return 0;
    }
    MAIS, quand nous essayons de tester ce même code avec un projet Windows Application, le comportement est étrange (note: c'est un programme avec un dialogue (resource) "DIALOGO" - un dialogue simple avec un bouton IDOK).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    #include <windows.h>
    #include <windowsx.h>
    #include <commctrl.h> 
    #include <stdio.h> 
    #include <string.h>
    #include <sqlite3.h>
    #include "main.h"
    long _stdcall zzz(); 
    HWND b; 
    MSG c; 
    FILE *fp;
    HINSTANCE i;
    
    static int callback(void *NotUsed, int argc, char **argv, char **azColName){
      char output[2560];
      sprintf(output, "%s", argv[1]);
      MessageBox(0, output, "", 0);
      return 0;
    }
    
    _stdcall WinMain(HINSTANCE i, HINSTANCE j, char *k, int l) 
    { 
       b=CreateDialog(i,(LPCTSTR)"DIALOGO",NULL,(DLGPROC)zzz);
       ShowWindow(b,SW_SHOW);
    
    	sqlite3 *db;
    	sqlite3_open("dict.db", &db);
    	char *zErrMsg;
    
    	//MessageBox(0, "", "", 0);
    	int rc = sqlite3_exec(db, "select * from a where a = 'asasa'", callback, 0, &zErrMsg);
    	rc = sqlite3_exec(db, "select * from a where a = 'asas'", callback, 0, &zErrMsg);
    	//rc = sqlite3_exec(db, "select * from a where a = 'a'", callback, 0, &zErrMsg);
    
    	//MessageBox(0, "", "", 0);
    
       while (GetMessage(&c,0,0,0)==TRUE)
       {
    	  TranslateMessage(&c); 
          DispatchMessage(&c);
       }
    } 
    long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z)
    { 
    	switch (x) {
    	case WM_INITDIALOG:
    	{
    		//
    		break;
    	}
    	case WM_COMMAND:
    	{
    		if (LOWORD(y) == 1){
    			printf("cavasio");
    		}
    		break;
    	}
    	case WM_CLOSE:
        {
    		//sqlite3 *db;
    		//sqlite3_close(db);
    	   EndDialog(b,0);
       	   PostQuitMessage(0);
    	   break;
        }
    	}
    	//return DefWindowProc(w,x,y,z);
    	return FALSE;
    }
    Dans cette partie du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	int rc = sqlite3_exec(db, "select * from a where a = 'asasa'", callback, 0, &zErrMsg);
    	rc = sqlite3_exec(db, "select * from a where a = 'asas'", callback, 0, &zErrMsg);
    	/*ICI*/rc = sqlite3_exec(db, "select * from a where a = 'a'", callback, 0, &zErrMsg);
    Il seulement fonctionne jusqu'à la ligne avec "// ICI"; dans ce ligne, un erreur "Access Violation" se passe, nous pensons que c'est du fichier NTDLL.DLL.
    Ça se passe seulement quand il trouve, dans le "dict.db", plus que 2 résultats. Avec un "dict.db" petit, l'erreur ne se passe pas.
    Le détail étrange, ce que nous fait croire que le problème est général du WinAPI, est que cette erreur ne se passe pas dans un projet Console, mais se passe dans le projet Windows Application... mais, biensûr, ce que nous parlons peut être déraisonnable, parce que nous sommes débutants...
    Le projet Pelles C, et les H et LIB du SQLite3 sont annexés (mais sans le dict.db grand).
    Quelques idées? Merci d'avance.
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec Eclipse/SQLite
    Par Heisenberg56 dans le forum Android
    Réponses: 8
    Dernier message: 11/02/2014, 13h33
  2. [C#]problème avec SqLite
    Par ClaudeBg dans le forum Linq
    Réponses: 8
    Dernier message: 18/06/2009, 16h17
  3. Problème avec SQLITE
    Par Jiyuu dans le forum Django
    Réponses: 2
    Dernier message: 12/03/2009, 07h07
  4. Problème avec PHP5 et SQLite
    Par oneTime dans le forum SQLite
    Réponses: 6
    Dernier message: 05/08/2008, 11h04
  5. Réponses: 2
    Dernier message: 02/06/2006, 23h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo