奇怪!!!!控制台程序运行时为什么还要USER32.DLL????
程序里绝对没有用到这个库中的任何函数! 问题点数: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




