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 voici comment ce passe l'initalisation

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 donn‚es 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 d‚marrer l'application car HostQueue ne peut pas ˆtre ouverte");
 
if (!db_hostdictionary.OpenDatabase())
throw new Exception("Impossible de d‚marrer l'application car HostDictionnary ne peut pas ˆtre ouverte");
if (!db_waitqueue.OpenDatabase())
throw new Exception("Impossible de d‚marrer l'application car WaitQueue ne peut pas ˆtre ouverte");
if (!db_readyqueue.OpenDatabase())
throw new Exception("Impossible de d‚marrer 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 :
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 donn‚es
/// </summary>
public static void Init()
{
if (!db_hostqueues.OpenDatabase())
throw new Exception("Impossible de d‚marrer l'application car HostQueue ne peut pas ˆtre ouverte");
}
sa marche !!!


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 donn‚es
/// </summary>
public static void Init()
{
if (!db_hostqueues.OpenDatabase())
throw new Exception("Impossible de d‚marrer l'application car HostQueue ne peut pas ˆtre ouverte");
if (!db_hostdictionary.OpenDatabase())
 
throw new Exception("Impossible de d‚marrer l'application car HostDictionnary ne peut pas ˆtre ouverte"); 
}

Plantage de l'application et berkeleydb qui me dit que le paramètre de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
berleydb DbEnv::set_tx_max
est invalide

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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
#pragma comment (lib, "libdb47.lib")
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

Merci de votre aide