J'ai programmé un wrapper C++/CLI pour utilise berkeleydb. Ce wrapper fonctionne très bien mais j'ai remarqué hier un soucie qui ne viens pas de mon code.
J'ai une class static, qui contiens les objets des bases de données berkeley donc qui utilise mon wrapper, cette class contient aussi une foncton
Code : Sélectionner tout - Visualiser dans une fenêtre à part dbInstancesvoici comment ce passe l'initalisation
Code : Sélectionner tout - Visualiser dans une fenêtre à part Init()
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 /// <summary> /// Objet de la base de donnes de liens /// </summary> public static BerkeleyQueueManagement db_hostqueues = new BerkeleyQueueManagement("./Env_dir_db_hostqueues", "db_hostqueues.db", Convert.ToUInt32(ConfigurationManager.AppSettings["CacheGigabyte"]), Convert.ToUInt32(ConfigurationManager.AppSettings["CacheSize"]), Convert.ToInt32(ConfigurationManager.AppSettings["CacheNumber"]), 1, "logdb_hostqueues.txt", Convert.ToUInt32(ConfigurationManager.AppSettings["TxnTimeout"]), Convert.ToUInt32(ConfigurationManager.AppSettings["TxnMax"])); etc....
Puis l'initialisation des bases de données
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 /// <summary> /// Initialise les bases de données /// </summary> public static void Init() { if (!db_hostqueues.OpenDatabase()) throw new Exception("Impossible de dmarrer l'application car HostQueue ne peut pas tre ouverte"); if (!db_hostdictionary.OpenDatabase()) throw new Exception("Impossible de dmarrer l'application car HostDictionnary ne peut pas tre ouverte"); if (!db_waitqueue.OpenDatabase()) throw new Exception("Impossible de dmarrer l'application car WaitQueue ne peut pas tre ouverte"); if (!db_readyqueue.OpenDatabase()) throw new Exception("Impossible de dmarrer l'application car ReadyQueue ne peut pas tre ouverte"); }
A ce niveau tout vas bien rien de bien méchant sauf que je ne peux pas initialiser toutes mes bases de données
si je fait :
sa marche !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 /// <summary> /// Initialise les bases de donnes /// </summary> public static void Init() { if (!db_hostqueues.OpenDatabase()) throw new Exception("Impossible de dmarrer l'application car HostQueue ne peut pas tre ouverte"); }
Si je fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 /// <summary> /// Initialise les bases de donnes /// </summary> public static void Init() { if (!db_hostqueues.OpenDatabase()) throw new Exception("Impossible de dmarrer l'application car HostQueue ne peut pas tre ouverte"); if (!db_hostdictionary.OpenDatabase()) throw new Exception("Impossible de dmarrer l'application car HostDictionnary ne peut pas tre ouverte"); }
Plantage de l'application et berkeleydb qui me dit que le paramètre deest invalide
Code : Sélectionner tout - Visualiser dans une fenêtre à part berleydb DbEnv::set_tx_max
Dès que j'essaie d'ouvrir plusieurs base de données sa plante.
Je me demande donc si cela ne viens pas de mon code C++ ? Je fais la liaison avec la dll de berkeleydb par
Je ne vois pas ce qui cloche dans mon code donc je suppose que peut être sa viens de la compilation mais je ne trouve pas non plus ce qui cloche a ce niveau
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2#pragma comment (lib, "libdb47.lib")
Merci de votre aide
Partager