Mr.C 发表于 2011-12-17 12:00:33

初学Win32问个问题

在程序开头有一串文件定义

include windows.inc
include user32.inc
includelibuser32.lib
includekernel32.inc
includelib   kernel32.lib

就这段,弄的有点晕

请解释一下,include和 includejlib的区别
为什么第一行之后不用加includelib   windows.lib
windows.inc和 user32    kernel32GDI32的关系。(有书说,windows.inc包含后面三个)

川本姨夫 发表于 2011-12-17 12:00:34

额,win7肯定搜不到32的,64位系统....
实在不明白的话就跳过吧。总之头文件就是一个对函数和常量以及结构体的声明,includelib就是包含导入库,不要在这些不重要的细节上耗费太多的时间,往下学,说不定哪天你就突然明白了。

   可能是不能言传的原因。。。意会算了 想通了也就那么回事

指尖豆蔻 发表于 2011-12-17 12:11:48

记得小甲鱼老师说过啦,一个是相当于头文件,一个是指出需要用到哪些库文件。

幕府幽魂 发表于 2011-12-17 13:27:01

声明是在WIN系统下的库,并且具体声明用到的函数所在的DLL

秋晓枫‰ 发表于 2011-12-17 17:25:07

呵呵,加油,我在学汇编

秋晓枫‰ 发表于 2011-12-17 17:25:43

WIN32打算下一步学,

秋晓枫‰ 发表于 2011-12-17 17:26:01

朋友,加油哦

川本姨夫 发表于 2011-12-18 01:09:14

先说 include和includelib的区别:前者是包含头文件,头文件是函数和结构等的声明,比如你用的MessageBox就在user32里边有声明,invoke才有办法检查参数个数,而MB_OK这些常量都在windows.inc里边声明,你也可以自己声明,比如在源程序前边写MessageBoxA proto:DWORD :DWORD :DWORD :DWORD 就可以直接调用了


inlcudelib是包含库,在win32汇编中是动态链接库,所以就是导入函数的信息,比如函数符号,所在位置等等


第二个问题: windows.inc包含的是windows要用到的常量和结构体的声明,没有函数,所以不用加LIB,函数都在另外两个user32和kernel里边了

第三个问题就不用说了吧,windows.inc和后边没有关系,一个声明结构体变量,一个声明函数,相互独立

还是要自己动手看看,你把windows.inc打开看,是不是全是XX   equ   XX      


XX   STRUCT   

   xxdd?
   ········

之类的,这都是常量和结构体,比如WNDCLASS就在windows.inc里边。



好像讲的够清楚了吧。。。。。希望你能早点弄明白,继续深入的学习

川本姨夫 发表于 2011-12-18 01:15:20

秋晓枫‰ 发表于 2011-12-17 17:25 static/image/common/back.gif
WIN32打算下一步学,

其实win32汇编可以直接跳过,win'下边用C++和delphi完全够用,要想搞破解也不用win32汇编的,有86汇编基础就行了,那些反汇编后虽然指令是那几个,但是和win32汇编完全占不到边,win32汇编就是用高级语法堆出来的,最终还是调用的API

熟悉了windows下的编程就可以去liunx下看看了,以后回不回来就看你自己了,但是回来的话,你就会觉得windows是那么的简单(仅限原理简单,不得不说微软是个把简单问题复杂化的专家)》。。。


也祝你早日找到属于自己的路 ,恭喜发财哈

Mr.C 发表于 2011-12-18 09:11:23

川本姨夫 发表于 2011-12-18 01:09 static/image/common/back.gif
先说 include和includelib的区别:前者是包含头文件,头文件是函数和结构等的声明,比如你用的MessageBox就 ...

为何,在VC++下写窗口程序,只需include <windows.h>
后面直接调用MessageBox(NULL,"sfda","aslkf",0);
而不需要include USER32.dll

川本姨夫 发表于 2011-12-18 11:42:33

Mr.C 发表于 2011-12-18 09:11 static/image/common/back.gif
为何,在VC++下写窗口程序,只需include
后面直接调用MessageBox(NULL,"sfda","aslkf",0);
而不需要in ...

不同的开发环境怎么比~~~

要想彻底弄明白你打开windows.inc 和windows.h对比一下你就知道了,windows.inc里边看不到一个函数的影子,windows.h自己去打开看,自己动过手才明白

Mr.C 发表于 2011-12-18 12:10:43

川本姨夫 发表于 2011-12-18 11:42 static/image/common/back.gif
不同的开发环境怎么比~~~

要想彻底弄明白你打开windows.inc 和windows.h对比一下你就知道了,windows. ...

没错不一样,但是我在windows.h中搜索相关函数,也是搜不到。比如MessageBox。
这是怎么回事。
难道是include中还有include
具体在哪,就MessageBox的定义,你能否在VC++环境中帮我摸一摸这条线路怎么走。
或许你说的没错,两个环境下概念有点不同。
我记得在学VC++时,孙老师说过,windows.h 就已经包含 Uer32GDI32Kernel32了。如果程序不确定所包含的函数在哪一个头文件中,就直接include windows.h
没错这样子吧?

但我还是没在windows.h中找到MessageBox的位置。求指点。

川本姨夫 发表于 2011-12-18 14:41:28

Mr.C 发表于 2011-12-18 12:10 static/image/common/back.gif
没错不一样,但是我在windows.h中搜索相关函数,也是搜不到。比如MessageBox。
这是怎么回事。
难道是i ...

那简单啊,就在windows.h中搜user32 和kernel32吧

Mr.C 发表于 2011-12-18 15:09:17

搜不到。

ever.g 发表于 2011-12-18 23:29:45

include 包含头文件吧
includelib包含要用到的库文件?

头文件是函数的一些声明,具体调用的的函数在库里面吧
masm32 里面貌似头文件都是xxx.inc
            库就是xxx.lib了吧

额,我也刚开始学,描述不准确吧

Mr.C 发表于 2011-12-18 23:32:12

三本哥回答的最细致,分给你了。

ever.g 发表于 2011-12-18 23:39:57

windows.inc里面搜到MSGF_MESSAGEBOX         equ 1
user32直接有个user32.inc头文件啊里面可以搜到MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
MessageBox equ <MessageBoxA>

MessageBoxExA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
MessageBoxEx equ <MessageBoxExA>

MessageBoxExW PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
MessageBoxIndirectA PROTO :DWORD
MessageBoxIndirect equ <MessageBoxIndirectA>

等等应该就是声明了吧

在vc98 的include下的windows.h里面也有NOMB            - MB_* and MessageBox()

据说masm32只不过是把这些函数库重新用汇编写了遍,不知道具体是怎么回事

页: [1]
查看完整版本: 初学Win32问个问题