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

c_d 2001-08-22 04:45:25
我拿到一个视频卡的SDK,并在它给出的例子的基础上继续做,编译DEBUG版本的时候没有问题,但是在编译RELEASE版的时候出现了一个警告:LINK : warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:REF。于是所有SHELL32.dll中的函数都不能用了,比如说ExitWindowsEx就用不了了。如何才能去掉这个警告呢?究竟是什么导致了这个警告呢?请教诸位高手。谢谢。
...全文
297 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
c_d 2001-08-27
  • 打赏
  • 举报
回复
to roy_hu:我做了一个判断,当变量a的某位为1(二进制)的情况下才执行那行代码。我使用了让a右移若干位,然后mod 2 的方法。我应该把a定义为BYTE类型,但是我没有注意,不小心定义了一个int型。在RELEASE版本下,符号位起作用,返回结果为-1,总不等于1,所以没有执行到。DEBUG版本下,返回结果为1,就执行到了,呵呵。
c_d 2001-08-27
  • 打赏
  • 举报
回复
to roy_hu:呵呵,试出来的。在RELEASE版里不能用单步跟踪,设了好多MESSAGEBOX呵呵。
roy_hu 2001-08-27
  • 打赏
  • 举报
回复
有这么多讲究啊,你怎么知道的
roy_hu 2001-08-25
  • 打赏
  • 举报
回复
to c_d:
那为什么你的debug版本能够运行到呢?
c_d 2001-08-25
  • 打赏
  • 举报
回复
问题解决,prog_st说得对,果然出的问题和那个警告没有关系,是我的代码其他地方的问题,感谢大家参与和提醒,谢谢,加分。:)
c_d 2001-08-24
  • 打赏
  • 举报
回复
to prog_st:你的意思是说,我在RELEASE版本里ExitWindowsEx没有执行,根本就和那个警告没有关系?55555555555,那就奇怪了啊,我的DEBUG版本明明是好好的啊,555555,我总不能让用户拿DEBUG版去用吧,5555555,救命啊,帮我搞定这个问题分数好商量啊,555555。
c_d 2001-08-24
  • 打赏
  • 举报
回复
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。
12345678 2001-08-24
  • 打赏
  • 举报
回复
VC中Release版连接优化造成的。应该没有问题!视频卡我做的多了,经常会有这种问题。
你可以看一下连接开关中一定有/OPT:REF
蒋晟 2001-08-24
  • 打赏
  • 举报
回复
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.

c_d 2001-08-24
  • 打赏
  • 举报
回复
最近,好象有很多人在编译的时候都遇到这样的警告。有没有人知道这种警告是怎么产生的呢?如何才能去掉呢?
c_d 2001-08-23
  • 打赏
  • 举报
回复
to prog_st:呵呵,不是我没有用到啊,是编译器的那个警告说不让用啊。我就是想知道怎么才能去掉那个警告让我用啊。我认为ExitWindowsEx没有被调用的原因就是,编译器提示的那个警告all references to "SHELL32.dll" discarded by /OPT:REF,所以没有被调用啊,或者说ExitWindowsEx的调用被忽略了啊。
mickeypeng 2001-08-23
  • 打赏
  • 举报
回复
怎么知道哪个是debug版本,哪个是release版本啊????
prog_st 2001-08-23
  • 打赏
  • 举报
回复
反正你的程序没用到Shell32.dll,但系统没说你的程序调用的其他DLL没有用到Shell32.dll,我觉得你将注意力只看Shell32上,是没必要的。应该具体找找ExitWindowsEx为什么没调用!

prog_st 2001-08-23
  • 打赏
  • 举报
回复
正式版显然没用到Shell32中的函数,这是编译器以指明的,你有做何解!
c_d 2001-08-23
  • 打赏
  • 举报
回复
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查看就会很明了。
c_d 2001-08-23
  • 打赏
  • 举报
回复
to happylaodu:
可是使用EWX_FORCE标志是强制关机啊,应用程序会丢掉数据的,我可是想让我的应用程序正常退出,然后关机啊。拜托,青菜豆腐,帮我想个主意吧。谢谢了。
happylaodu 2001-08-23
  • 打赏
  • 举报
回复
ExitWindowEx我是好长时间以前用的了,当时或许敢碰到过你说的这个问题:在Debug和Release下表现的不一样。
我看了一下,我现在的程序中用的是:
::ExitWindowsEx(EWX_POWEROFF|EWX_FORCE,NULL); Release版本,可正常关机
c_d 2001-08-23
  • 打赏
  • 举报
回复
to gongxy:
那么可能是什么原因导致了我的程序在DEBUG版本中调用ExitWindowsEx(EWX_SHUTDOWN,0);是成功的,可是到了RELEASE版本中调用就不成功呢?
gongxy 2001-08-23
  • 打赏
  • 举报
回复
prog_st(st)说的没错
好好查查你的程序
c_d 2001-08-23
  • 打赏
  • 举报
回复
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__;
没有别的。

大家救命啊~~~~~
加载更多回复(13)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧