2010-09-09 4 views
1

J'utilise actuellement SQLitening (www.sqlitening.com) dans une application C++ où j'appelle SQLitening.dll. SQLitening.dll effectue des appels ultérieurs à SQLiteningClient.dll, Zlib.dll et SQLite3.dll. Je hooking SQLitening.dll explicitement, en exécutant quelques fonctions, puis je ferme la connexion et déréférencer la DLL avec FreeLibrary. Toutefois, les DLL suivantes (SQLiteningClient.dll, etc) restent accrochées au processus appelant. Chaque fois que j'essaie de recréer SQLitening.dll, il se connecte correctement, mais certaines fonctions se comportent mal, comme la fonction d'interrogation de la base de données distante. Je ne peux pas m'empêcher de penser que c'est parce que ces DLL ne sont pas libérées correctement. Chaque fois que j'avais hooké implicitement la DLL (accroissant chaque fonction globalement), tout fonctionnait bien tant que je la gardais en mémoire tout le temps. Cependant, je dois le faire explicitement.Je dois appeler une DLL qui appelle 5 autres dll à plusieurs reprises dans une application

Remarque: Fred Meier de SQLitening a déclaré que la liaison explicite fonctionnait correctement dans une application PowerBasic. Je devrais également noter que SQLitening a été écrit dans PowerBasic.

Y at-il un moyen de générer un processus séparé ou un thread pour que SQLitening.dll à tout hooker, de sorte que lorsque je déréférence SQLitening je peux simplement tuer ce processus? Ou existe-t-il un moyen spécial de s'assurer que tout ce que SQLitening appelle est correctement déréférencé? Merci.

-Matt Phelps

-résolution Systems

Répondre

0

Juste décrochez vos crochets ou vérifier si la fonction est déjà accroché avant le crochet il.

+1

On dirait que cela aurait pu provenir de "Programmation par le Dr Suse" –

1

J'ai résolu le problème en utilisant simplement un COM exe qui charge explicitement la DLL.

Questions connexes