阅读:2101回复:8
求助:static libray or shared dll基本情况:vc++6英文版,win2k中文版+sp4,mfc向导生成的一个dialog. 问题:如果将project设置为use mfc in a shared dll后,用CWnd:Create(参数略)函数可以成功 创建一个窗体并附在父窗体上,而如果设置为use mfc in a static library后,调用函数总是不成功, 提示afxwin1.inl的第19行出错,查看了18-20行的内容,如下: _AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle() { ASSERT(afxCurrentInstanceHandle != NULL); return afxCurrentInstanceHandle; } 纳闷:current instance怎么会是空? 谁知道是怎么回事? |
|
|
沙发#
发布于:2004-06-07 17:35
好像MFC为了处理dlg的isDialogMessage 在内部作了一些处理,可能用static library时再跑dlg加Cwnd就有多线程句柄问题-------应该主要就是dlg和cwnd两个取message的部分有限制,所以得用share dll
|
|
|
板凳#
发布于:2004-08-24 15:15
如果没有绝对需要,不要用静态的MFC。
|
|
地板#
发布于:2004-08-24 17:12
如果没有绝对需要,不要用静态的MFC。 why? |
|
地下室#
发布于:2004-08-25 11:34
简单的理由,如果MFC有bug,微软可以给MFC42.DLL打补丁,可是没法给静态连接MFC的程序打补丁。
稍微复杂的理由,MFC静态库对多线程支持不好。 更复杂的理由,你的程序主体部分用静态MFC,但是不能保证你引用的DLL不访问MFC动态库,说不定两者分配的资源就要打架了。 |
|
5楼#
发布于:2004-08-25 11:46
MFC,嘿嘿,偶不会,只会用SDK的方式老牛拉破车,郁闷。。。。。。。
|
|
|
6楼#
发布于:2004-08-26 12:24
简单的理由,如果MFC有bug,微软可以给MFC42.DLL打补丁,可是没法给静态连接MFC的程序打补丁。 不是很充分,但有一定的道理. |
|
7楼#
发布于:2004-08-26 23:44
steven__xu说得很不错!确实是这样,现在2K以上都把MFC42.DLL当然操作系统的一部分默认安装了!候捷的<<深入浅出MFC>>可能会给你答案,里面剖析过wnd:create()的整个调用过程!可能还得自己去好好想想才能有所解!
|
|
|
8楼#
发布于:2004-08-27 00:18
steven__xu说得很不错!确实是这样,现在2K以上都把MFC42.DLL当然操作系统的一部分默认安装了!候捷的<<深入浅出MFC>>可能会给你答案,里面剖析过wnd:create()的整个调用过程!可能还得自己去好好想想才能有所解! 好,回去看一看! |
|