CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

奇怪!!!!控制台程序运行时为什么还要USER32.DLL????

楼主NowCan(城市浪人)2001-06-26 21:31:31 在 C++ Builder / 基础类 提问

程序里绝对没有用到这个库中的任何函数! 问题点数:88、回复次数:16Top

1 楼xycleo()虚竹和尚()回复于 2001-06-26 23:08:03 得分 0

是系统的问题吧!!user32.dll我记得是98的一个系统文件!!Top

2 楼rh(花覆茅檐)回复于 2001-06-26 23:20:34 得分 0

不一定哦!  
  tdump   yourexefilename.exe     看看  
   
  HIHI~~~~~Top

3 楼wjzhuang(程序猪)回复于 2001-06-27 09:09:40 得分 0

如果有  
  #include   <vcl.h>  
  那就有可能了Top

4 楼luhongjun(过江项羽)回复于 2001-06-27 09:18:37 得分 0

同意wjzhuang(醉里挑灯看剑--程序猪)。Top

5 楼ALNG(?)回复于 2001-06-27 09:26:57 得分 10

我估计你使用了User32.dll中的输出函数。   按RH说的TDUMP一下就清楚了。  
  你是说所用的win32   console   application都要用User32.dll,   这应该不一定吧?我查一下Top

6 楼NowCan(城市浪人)回复于 2001-06-27 14:56:59 得分 0

USER32.DLL   是Windows核心DLL之一,但CUI程序应该不需要它。  
   
  rh,用tdump什么也看不到,我是用VC的ViewDependance看的。  
   
  wjzhuang,程序没有#include   <vcl.h>  
   
  只有一句话,大虾们可以试试。  
   
  void   main()  
  {  
  for(;;);  
  }  
   
  Top

7 楼NowCan(城市浪人)回复于 2001-06-27 14:58:58 得分 0

同一个程序用VC编译,就没有用到USER32.DLL。  
  在运行时用DLLShow这个软件查看,发现BCB编译的程序还要ADVAPI.DLL等等的支持。  
   
  想不通!  
   
  Top

8 楼wjzhuang(程序猪)回复于 2001-06-27 15:08:40 得分 18

我试过了,没有  
  #include   <vcl.h>  
  可以在别的机器上运行  
  不过要发布  
  把project->option->linker->use   dynamic   RTC   去掉,  
  把project->option->packages->build   with   runtime   packages   去掉!  
  我的代码如下:  
   
  #include   <conio.h>       //   我添加的  
   
  #pragma   hdrstop  
   
  //---------------------------------------------------------------------------  
   
  #pragma   argsused  
  int   main(int   argc,   char*   argv[])  
  {  
          for(;;)  
          {  
                  if(getch())      
                        break;  
          }  
          return   0;  
  }  
  Top

9 楼rh(花覆茅檐)回复于 2001-06-27 16:56:05 得分 0

笑话!什么叫看不到哦:)  
  在你没有完全连接时,引入内容如下:  
  Imports   from   KERNEL32.DLL  
                                      CloseHandle  
                                      CreateFileA  
                                      ExitProcess  
                                      。。。  
                                      。。。  
  Imports   from   USER32.DLL                                     //这里引入了!!!  
                                      EnumThreadWindows  
                                      MessageBoxA  
                                      wsprintfA                                          
   
   
  程序代码:  
  //---------------------------------------------------------------------------  
   
  #pragma   hdrstop  
   
  //---------------------------------------------------------------------------  
   
  #pragma   argsused  
  void   main()  
  {  
  for(;;);  
  }  
   
  用tdump怎么会看不到!奇怪!!Top

10 楼rh(花覆茅檐)回复于 2001-06-27 16:58:07 得分 0

不对。。。  
  没有完全连接时,引入如下:  
  Imports   from   KERNEL32.DLL  
                                      GetModuleHandleA  
                                      GetProcAddress  
                                      GetProcessHeap  
                                      HeapAlloc  
                                      HeapFree  
   
  Imports   from   CC3250.DLL  
                                      _InitTermAndUnexPtrs()  
                                      ___CRTL_MEM_UseBorMM  
                                      ___CRTL_TLS_Alloc  
                                      ___CRTL_TLS_ExitThread  
                                      。。。。  
   
  完全连接了的,是上面帖子里那个,就可以看见,事实上是用到user32的  
  Top

11 楼rh(花覆茅檐)回复于 2001-06-27 17:05:26 得分 60

回复人:NowCan(能量、激情、雨水、彩虹——雷雨云) (2001-6-27   14:58:59)     得0分    
  同一个程序用VC编译,就没有用到USER32.DLL。  
  在运行时用DLLShow这个软件查看,发现BCB编译的程序还要ADVAPI.DLL等等的支持。  
   
  想不通!  
   
  /////////////////////////////////////////////////  
  根据上面的实验,可以看见,我们使用动态连接方式引入函数时  
  用tdump可以看见,bcb也没有用到user32  
  但是静态连接了后,就需要了  
   
  所以,我认为vc之所以没有用到  
  是因为微软的vc本身并没有完全静态连接  
  (据说vc完全编译了的程序事实上还是用到dll,不过这些dll已经随win98等系统发放,所以vc编译的程序要比bcb小。我想是这个原因。但是究竟是为什么静态连接了就要引入?这是俺所不知道的。以上言论,纯属俺的瞎判断,若有错误,还望指正)Top

12 楼NowCan(城市浪人)回复于 2001-06-27 19:05:07 得分 0

vc完全编译了的程序当然也用到了DLL,但是只有kernel32.dll这一个。  
  而bcb完全编译了的程序用到的dll却不止这一个。  
   
  我认为生成的程序大小不是由这个原因引起的。Top

13 楼NowCan(城市浪人)回复于 2001-06-27 19:07:40 得分 0

根据上面的实验,可以看见,我们使用动态连接方式引入函数时  
  用tdump可以看见,bcb也没有用到user32  
   
  但实际上,   CC3250.DLL这个dll本身会引用user32.dllTop

14 楼NowCan(城市浪人)回复于 2001-06-28 16:31:59 得分 0

没人理了?Top

15 楼rh(花覆茅檐)回复于 2001-06-28 23:33:07 得分 0

拜托!偶的意思就是  
   
  vc的完全编译,事实上并不完全  
   
  ok?Top

16 楼NowCan(城市浪人)回复于 2001-07-05 20:34:47 得分 0

给分Top

相关问题

  • 如何取消WIN32控制台程序运行时的界面!
  • 如何在VC控制台下运行C程序
  • 我在控制台下运行java不行了
  • 如何在给定窗口运行一个控制台程序
  • jb5上如何运行控制台程序?
  • eclipse下运行控制台应用程序遇到的问题
  • 怎么隐藏控制台程序在后台运行
  • 如何远程运行故障恢复控制台
  • 为什么我运行窗口(非控制台)程序,后面总是有个控制台显示出来
  • vc6.0中控制台程序 调用dll问题?

关键词

  • 编译
  • 函数
  • 连接
  • bcb
  • dll
  • vc
  • 系统
  • 程序
  • tdump
  • 运行

得分解答快速导航

  • 帖主:NowCan
  • ALNG
  • wjzhuang
  • rh

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo