KungFu
驱动大牛
驱动大牛
  • 注册日期2001-09-27
  • 最后登录2008-04-08
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望24点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
阅读:2101回复:8

求助:static libray or shared dll

楼主#
更多 发布于:2004-05-31 11:52

基本情况: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怎么会是空?

谁知道是怎么回事?
我不写驱动好多年
w8zz
驱动小牛
驱动小牛
  • 注册日期2001-12-12
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望23点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-06-07 17:35
好像MFC为了处理dlg的isDialogMessage 在内部作了一些处理,可能用static library时再跑dlg加Cwnd就有多线程句柄问题-------应该主要就是dlg和cwnd两个取message的部分有限制,所以得用share dll
小熊和二申公豹 [img]http://www.driverdevelop.com/forum/upload/w8zz/2003-08-11_黑爸.jpg[/img] 二哥,三娃儿,快帮忙!
steven__xu
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2013-09-03
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-24 15:15
如果没有绝对需要,不要用静态的MFC。
Sundsea
驱动老牛
驱动老牛
  • 注册日期2003-05-06
  • 最后登录2012-06-05
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望35点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-24 17:12
如果没有绝对需要,不要用静态的MFC。


why?
steven__xu
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2013-09-03
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-25 11:34
简单的理由,如果MFC有bug,微软可以给MFC42.DLL打补丁,可是没法给静态连接MFC的程序打补丁。
稍微复杂的理由,MFC静态库对多线程支持不好。
更复杂的理由,你的程序主体部分用静态MFC,但是不能保证你引用的DLL不访问MFC动态库,说不定两者分配的资源就要打架了。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2004-08-25 11:46
MFC,嘿嘿,偶不会,只会用SDK的方式老牛拉破车,郁闷。。。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
Sundsea
驱动老牛
驱动老牛
  • 注册日期2003-05-06
  • 最后登录2012-06-05
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望35点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-08-26 12:24
简单的理由,如果MFC有bug,微软可以给MFC42.DLL打补丁,可是没法给静态连接MFC的程序打补丁。
稍微复杂的理由,MFC静态库对多线程支持不好。
更复杂的理由,你的程序主体部分用静态MFC,但是不能保证你引用的DLL不访问MFC动态库,说不定两者分配的资源就要打架了。
 



不是很充分,但有一定的道理.
dustfly
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2004-11-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-08-26 23:44
steven__xu说得很不错!确实是这样,现在2K以上都把MFC42.DLL当然操作系统的一部分默认安装了!候捷的<<深入浅出MFC>>可能会给你答案,里面剖析过wnd:create()的整个调用过程!可能还得自己去好好想想才能有所解!
like fly... like free... like do something like to do!
Sundsea
驱动老牛
驱动老牛
  • 注册日期2003-05-06
  • 最后登录2012-06-05
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望35点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-08-27 00:18
steven__xu说得很不错!确实是这样,现在2K以上都把MFC42.DLL当然操作系统的一部分默认安装了!候捷的<<深入浅出MFC>>可能会给你答案,里面剖析过wnd:create()的整个调用过程!可能还得自己去好好想想才能有所解!


好,回去看一看!
游客

返回顶部