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 fonctonCode:dbInstances
voici comment ce passe l'initalisationCode:Init()
Code:
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:
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 8O
si je fait :
sa marche !!!Code:
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:
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 :aie:Code: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 :aie:Code:
1
2#pragma comment (lib, "libdb47.lib")
Merci de votre aide