CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

有关VC++编译的问题,请教诸位高手。谢谢。

楼主c_d(老土豆花)2001-08-22 16:45:25 在 VC/MFC / 基础类 提问

我拿到一个视频卡的SDK,并在它给出的例子的基础上继续做,编译DEBUG版本的时候没有问题,但是在编译RELEASE版的时候出现了一个警告:LINK   :   warning   LNK4089:   all   references   to   "SHELL32.dll"   discarded   by   /OPT:REF。于是所有SHELL32.dll中的函数都不能用了,比如说ExitWindowsEx就用不了了。如何才能去掉这个警告呢?究竟是什么导致了这个警告呢?请教诸位高手。谢谢。 问题点数:30、回复次数:33Top

1 楼prog_st(st)回复于 2001-08-22 17:49:42 得分 10

这个警告是由于release版本优化造成的,实际上你的程序中没用到SHELL32.dll中的函数。  
  ExitWindowsEx使用   User32.dll.  
   
  不用管这个警告,如非去掉不可,将以随便使用一个Shell32.dll的函数!Top

2 楼c_d(老土豆花)回复于 2001-08-22 18:06:25 得分 0

但是我使用ExitWindowsEx(EWX_SHUTDOWN,0)关闭计算机,在DEBUG版本下一切正常,可是在RELEASE版本下除了不能正常关机,其他一切正常,好象我没有在程序里写ExitWindowsEx(EWX_SHUTDOWN,0);一样。这个警告不管不成啊,老哥。Top

3 楼roy_hu(roy_hu)回复于 2001-08-22 18:14:30 得分 0

关注Top

4 楼fbc(feng)回复于 2001-08-22 18:19:25 得分 0

是不是16   和32的问题呢Top

5 楼fbc(feng)回复于 2001-08-22 18:19:44 得分 0

SDK   好多都是16的。Top

6 楼c_d(老土豆花)回复于 2001-08-22 18:52:18 得分 0

我这个SDK是32位版本的,绝对没有问题。Top

7 楼jiangsheng(蒋晟.Net[MVP])回复于 2001-08-22 18:59:33 得分 5

看看你的ExitWindowsEx有没有执行到?Top

8 楼crossroad(小A)回复于 2001-08-22 19:28:03 得分 5

如果是windows2000/NT,那么函数ExitWindowsEx必须有SE_SHUTDOWN_NAME权限。  
  用ExitWindowsEx(EWX_SHUTDOWN   |   EWX_FORCE,   0)试试。  
  Top

9 楼victorlee_lq(victor)回复于 2001-08-22 19:32:32 得分 0

我也遇到了同样的问题,关注!!Top

10 楼c_d(老土豆花)回复于 2001-08-23 08:27:10 得分 0

to   jiangsheng:如果ExitWindowsEx没有执行到,则在DEBUG版本中也不能执行到才对啊,可是我的DEBUG版一切正常。  
  to   crossroad:我是在98下运行的,在我以前做的东东里也用过ExitWindowsEx(EWX_SHUTDOWN,0);没有问题的,可以关掉计算机。  
  to   prog_st:实际上SHELL32.DLL包括了User32.dll、Kernel32.dll。这一点你可以使用Visual   Studio   6.0   中带的工具Depends,打开Shell32.dll查看就会很明了。Top

11 楼prog_st(st)回复于 2001-08-23 08:33:16 得分 0

正式版显然没用到Shell32中的函数,这是编译器以指明的,你有做何解!Top

12 楼prog_st(st)回复于 2001-08-23 08:38:50 得分 0

反正你的程序没用到Shell32.dll,但系统没说你的程序调用的其他DLL没有用到Shell32.dll,我觉得你将注意力只看Shell32上,是没必要的。应该具体找找ExitWindowsEx为什么没调用!  
   
  Top

13 楼mickeypeng(鹏)回复于 2001-08-23 08:41:35 得分 0

怎么知道哪个是debug版本,哪个是release版本啊????Top

14 楼c_d(老土豆花)回复于 2001-08-23 09:18:34 得分 0

to   prog_st:呵呵,不是我没有用到啊,是编译器的那个警告说不让用啊。我就是想知道怎么才能去掉那个警告让我用啊。我认为ExitWindowsEx没有被调用的原因就是,编译器提示的那个警告all   references   to   "SHELL32.dll"   discarded   by   /OPT:REF,所以没有被调用啊,或者说ExitWindowsEx的调用被忽略了啊。Top

15 楼c_d(老土豆花)回复于 2001-08-23 14:49:43 得分 0

我想警告all   references   to   "SHELL32.dll"   discarded   by   /OPT:REF中OPT的意思应该是选项,选项REF导致了all   references   to   "SHELL32.dll"   discarded。可是我找了半天也没有找到这个选项是在哪里选的,应该在什么地方去掉它呢?Top

16 楼zj_ok(zj_ok)回复于 2001-08-23 15:10:40 得分 0

gzTop

17 楼happylaodu(青菜豆腐)回复于 2001-08-23 15:39:02 得分 5

/OPT是Link的参数设置吧,你看一下Project/Settings       Release版里面Link页有没有这项设置.  
   
  Top

18 楼jiangsheng(蒋晟.Net[MVP])回复于 2001-08-23 15:49:41 得分 0

有没有放在#ifdef   _DEBUG里面?Top

19 楼c_d(老土豆花)回复于 2001-08-23 16:20:41 得分 0

to   happylaodu:  
  我看了Project/Settings     Release版里面Link页Project   Options中为:********.Lib   /nologo   /subsystem:windows   /incremental:no   /pdb:"Release/XXXX.pdb"   /machine:I386   /out:"Release/XXXX.exe"   /libpath:"..\..\lib"   其中******是SDK提供的一个库,用于操作视频卡的,XXXX是我的应用程序的程序名。没有看到“/OPT”。  
  to   jiangsheng:  
  我的#ifdef   _DEBUG和#endif之间只有以下几句:  
  #define   new   DEBUG_NEW  
  #undef   THIS_FILE  
  static   char   THIS_FILE[]   =   __FILE__;  
  没有别的。  
   
  大家救命啊~~~~~  
  Top

20 楼gongxy(codekiller)回复于 2001-08-23 16:52:11 得分 3

prog_st(st)说的没错  
  好好查查你的程序Top

21 楼c_d(老土豆花)回复于 2001-08-23 16:57:14 得分 0

to   gongxy:  
  那么可能是什么原因导致了我的程序在DEBUG版本中调用ExitWindowsEx(EWX_SHUTDOWN,0);是成功的,可是到了RELEASE版本中调用就不成功呢?Top

22 楼happylaodu(青菜豆腐)回复于 2001-08-23 17:26:11 得分 0

ExitWindowEx我是好长时间以前用的了,当时或许敢碰到过你说的这个问题:在Debug和Release下表现的不一样。  
  我看了一下,我现在的程序中用的是:  
  ::ExitWindowsEx(EWX_POWEROFF|EWX_FORCE,NULL);         Release版本,可正常关机  
  Top

23 楼c_d(老土豆花)回复于 2001-08-23 17:34:05 得分 0

to   happylaodu:  
  可是使用EWX_FORCE标志是强制关机啊,应用程序会丢掉数据的,我可是想让我的应用程序正常退出,然后关机啊。拜托,青菜豆腐,帮我想个主意吧。谢谢了。Top

24 楼c_d(老土豆花)回复于 2001-08-24 13:55:09 得分 0

最近,好象有很多人在编译的时候都遇到这样的警告。有没有人知道这种警告是怎么产生的呢?如何才能去掉呢?Top

25 楼jiangsheng(蒋晟.Net[MVP])回复于 2001-08-24 14:45:08 得分 0

ExitWindowsEx  
  The   ExitWindowsEx   function   either   logs   off   the   current   user,   shuts   down   the   system,   or   shuts   down   and   restarts   the   system.   It   sends   the   WM_QUERYENDSESSION   message   to   all   applications   to   determine   if   they   can   be   terminated.    
   
  Top

26 楼12345678()回复于 2001-08-24 15:07:07 得分 2

VC中Release版连接优化造成的。应该没有问题!视频卡我做的多了,经常会有这种问题。  
  你可以看一下连接开关中一定有/OPT:REFTop

27 楼c_d(老土豆花)回复于 2001-08-24 15:39:43 得分 0

to   jiangsheng:呵呵,MSDN里是这么说的,但是在后面还有关于使用EWX_FORCE标志的说明,是这么说的:Forces   processes   to   terminate.   When   this   flag   is   set,   the   system   does   not   send   the   WM_QUERYENDSESSION   and   WM_ENDSESSION   messages.   This   can   cause   the   applications   to   lose   data.   Therefore,   you   should   only   use   this   flag   in   an   emergency.  
  to   12345678:能不能说得具体一些,连接开关中的/OPT:REF在什么地方啊,我找了两天了都没有找到啊,55555。Top

28 楼c_d(老土豆花)回复于 2001-08-24 17:38:12 得分 0

to   prog_st:你的意思是说,我在RELEASE版本里ExitWindowsEx没有执行,根本就和那个警告没有关系?55555555555,那就奇怪了啊,我的DEBUG版本明明是好好的啊,555555,我总不能让用户拿DEBUG版去用吧,5555555,救命啊,帮我搞定这个问题分数好商量啊,555555。Top

29 楼c_d(老土豆花)回复于 2001-08-25 13:23:51 得分 0

问题解决,prog_st说得对,果然出的问题和那个警告没有关系,是我的代码其他地方的问题,感谢大家参与和提醒,谢谢,加分。:)Top

30 楼roy_hu(roy_hu)回复于 2001-08-25 20:56:17 得分 0

to   c_d:  
  那为什么你的debug版本能够运行到呢?Top

31 楼c_d(老土豆花)回复于 2001-08-27 11:39:37 得分 0

to   roy_hu:我做了一个判断,当变量a的某位为1(二进制)的情况下才执行那行代码。我使用了让a右移若干位,然后mod   2   的方法。我应该把a定义为BYTE类型,但是我没有注意,不小心定义了一个int型。在RELEASE版本下,符号位起作用,返回结果为-1,总不等于1,所以没有执行到。DEBUG版本下,返回结果为1,就执行到了,呵呵。Top

32 楼roy_hu(roy_hu)回复于 2001-08-27 16:42:32 得分 0

有这么多讲究啊,你怎么知道的Top

33 楼c_d(老土豆花)回复于 2001-08-27 18:43:12 得分 0

to   roy_hu:呵呵,试出来的。在RELEASE版里不能用单步跟踪,设了好多MESSAGEBOX呵呵。Top

相关问题

  • 有关VC编译方面的一个问题
  • VC编译问题
  • vc++编译问题???
  • VC 编译问题!!
  • vc编译错误
  • vc不能编译
  • 编译问题!VC
  • vc编译 程序
  • VC++编译问题
  • VC编译问题

关键词

  • 版本
  • 函数
  • debug
  • release
  • 编译器
  • 执行
  • shell
  • 应用程序
  • exitwindowsex
  • 警告

得分解答快速导航

  • 帖主:c_d
  • prog_st
  • jiangsheng
  • crossroad
  • happylaodu
  • gongxy
  • 12345678

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

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