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
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
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 :
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");
} |
sa marche !!!
Si je fait :
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 de
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
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
Partager