我目前在C ++应用程序中使用SQLitening(www.sqlitening.com),我正在调用SQLitening.dll。 SQLitening.dll随后调用SQLiteningClient.dll,Zlib.dll和SQLite3.dll。我正在显式挂钩SQLitening.dll,执行一些函数,然后关闭连接并使用FreeLibrary解除引用dll。
但是,后续的dll(SQLiteningClient.dll等)仍然挂钩到调用进程。每当我尝试再次挂钩SQLitening.dll时,它都会挂钩,但是有些函数行为不端,比如查询远程数据库的函数。我不禁想到这是因为那些dll没有被正确免费。每当我隐式地挂钩dll(全局挂钩每个函数)时,只要我一直将它保存在内存中,一切都运行良好。但是,我需要明确地这样做。
注意:SQLitening的Fred Meier说明确的链接在PowerBasic应用程序中运行良好。我还应该注意到SQLitening是用PowerBasic编写的。
有没有办法为SQLitening.dll生成一个单独的进程或线程来挂钩所有内容,这样当我取消引用SQLitening时我可以杀掉那个进程?或者是否有一种特殊方法可以确保SQLitening调用的所有内容都被正确解除引用?感谢。
-Matt Phelps
- 分辨率系统
答案 0 :(得分:1)
我通过使用一个明确加载dll的COM exe解决了这个问题。
答案 1 :(得分:0)
在挂钩之前,只需解开挂钩或检查功能是否已挂钩。