程序代码:
AfxLoadLibrary("a.dll");其中,a.dll静态依赖于b.dll,即a.dll加载前必须加载b.dll。a.dll和b.dll均在系统的执行路径中。上述代码如果直接调用无任何问题。但如果把代码用AfxBeginThread启用新线程调用,程序则会运行到此代码处莫名其妙挂起,不再执行。补充说明:调用程序本身也静态加载了b.dll。
AfxLoadLibrary("a.dll");其中,a.dll静态依赖于b.dll,即a.dll加载前必须加载b.dll。a.dll和b.dll均在系统的执行路径中。上述代码如果直接调用无任何问题。但如果把代码用AfxBeginThread启用新线程调用,程序则会运行到此代码处莫名其妙挂起,不再执行。补充说明:调用程序本身也静态加载了b.dll。
解决方案 »
- 子窗口透明设置
- ON_WM_MBUTTONDOWN时获取控件按扭ID?
- 我的com组件突然 CreateInstance 失败。以前是好使的
- 关于按钮的Icon和BitMap有什么区别啊?
- CTreeCtrl,为什么我的结果与这段代码的结果完全不一样?
- 线程怎么自动退出了
- CRichEditCtrl滚动条的移动问题~~~~~急急急急急急急急急急~~~在线等~~~~
- 一个有趣的编程题!!有兴趣请进
- desktop.ini 和Folder.htt两个文件是病毒产生的吗?怎样改变簇的大小
- *.wdl是什么文件,用什么工具打开(是不是超星阅览器?但怎么打不开)
- 请问VC里的classview的类的名字如何改动?
- 关于多线程环境下日志系统如何实现?
1.
你的工程是动态链接到MFC运行库还是静态链接到MFC运行库的? 使用AfxLoadLibrary要求动态链接到MFC运行库.2.
a.dll, b.dll是不是MFC扩展dll? 如果不是MFC扩展dll, 那可以试试 LoadLibrary/FreeLibray
2、a.dll是MFC 规则DLL、b.dll是第三方dll,不需要mfc。
3、LoadLibrary和FreeLibrary一样,运行到调用处死锁。
怀疑原因,是否因为主程序已经加载了b.dll,造成线程中加载死锁?
你说的调用仅仅是指 AfxLoadLibrary 呢还是 load之后调用dll里面的函数?
http://www.microsoft.com/whdc/driver/kernel/DLL_bestprac.mspx
1.当你创建新的线程的时候,都会调用每个dll的dllmain函数,
2.并且每个dllmain函数的执行过程是同步执行的,也就是说,如果你创建线程的地方,不正确的话,就会导致dllmain由于等待事件,从而挂起。
你可以根据这两条规则好好分析一下到底是怎么挂起了,我记得msdn上好像说过,不提倡在dllmain里面创建线程。
Using AfxLoadLibrary and AfxFreeLibrary insures that the startup and shutdown code that executes when the extension DLL is loaded and unloaded does not corrupt the global MFC state
是不是有接口里忘了调用AFX_MANAGE_STATE(AfxGetStaticModuleState( ))???
至于问题是否特定于notes,无法确定。不过Notes的API对多线程的支持实在不好,头疼不已。
至于问题是否特定于notes,无法确定。不过Notes的API对多线程的支持实在不好,头疼不已。