| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1863 人关注过本帖
标题:32汇编下为什么不用include user32.inc 声明API函数就可以使用了啊
只看楼主 加入收藏
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:17 
32汇编下为什么不用include user32.inc 声明API函数就可以使用了啊
.386
.model flat,stdcall
include Irvine32.inc
includelib user32.lib
includelib kernel32.lib
includelib irvine32.lib
.data
hello byte "this is a message!",0
caption byte "message",0
.code
main proc
mov edx,offset hello
mov ebx,offset caption
call MsgBox
main endp
end main

有些地方不解,为什么
includelib user32.lib
includelib kernel32.lib
这两句没有 用include  user32.inc 和 include kernel32.inc 啊。不用在声明API函数? 难道masn32编译时候隐含声明了吗?
就好像VC里面调用API函数也要加 windows.h头文件啊
搜索更多相关主题的帖子: 声明 message include 
2012-07-27 23:11
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
你得先明白这俩都是干啥的才能知道为什么

inc是头文件 主要放的是API的声明和相关的结构体 常量等 对于API调用来说呢 如果不包含inc文件invoke伪指令会失效 因为这时候编译器不知道函数的声明情况

lib是库文件 简单来说用于在链接时候让程序正确的调用API 如果没有它可能会出现什么【无法解析】等的问题

看了这个 你再看你的问题 不知道明白了没有
2012-07-27 23:28
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 2楼 zklhp
includelib user32.lib
includelib kernel32.lib

但是我程序没有写入API函数的声明啊。我看了 kernel32.inc 里面的文件全是API函数的调用声明 而我加了includelib user32.lib 却没有写入对应的include user32.inc文件也可以编译。
include kernel32.inc
include kernel32.inc
我看见别人的程序框架都有这两句用来声明API函数的。



就如同在VC里面 我要用API函数 就必须要加入 windows.h头文件来声明API函数,lib就不需要写了,VC会默认编译进入了= =
2012-07-28 16:27
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
从你这个程序来讲

call MsgBox

你这个不是API 自然 不写什么kernel32.inc kernel32.lib 也是可以编译通过的 这个貌似是在那个irvine32的库里提供的罢 那样不属于系统的API 自然也不需要系统的头文件和库
2012-07-28 18:31
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:10 
以下是引用zklhp在2012-7-27 23:28:10的发言:

你得先明白这俩都是干啥的才能知道为什么

inc是头文件 主要放的是API的声明和相关的结构体 常量等 对于API调用来说呢 如果不包含inc文件invoke伪指令会失效 因为这时候编译器不知道函数的声明情况

lib是库文件 简单来说用于在链接时候让程序正确的调用API 如果没有它可能会出现什么【无法解析】等的问题

看了这个 你再看你的问题 不知道明白了没有

注意看我这条回复你会发现

如果不包含inc文件invoke伪指令会失效

也就是说 inc文件只在使用invoke调用API时才起作用 其他调用方式 比如call 是不起作用的 至于为啥你要是好奇我再跟你说罢

则 就算是你调用了一个系统的API 比如 MessageBox 这个是系统的API啊 但是你是用的push参数call MessageBox 调用的 不写inc也无所谓

2012-07-28 18:36
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 4楼 zklhp
kernel32.inc kernel32.lib  不加不能通过连接。他说了一大堆函数未引用的问题。
2012-07-30 17:07
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 5楼 zklhp
Irvine32 我用该书作者的这些提供的库函数,编译连接后 竟然大小为9KB= =
而不用他的函数库
我直接用windows的。
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

我用windows的API函数。编译连接也就2KB左右的大小而已。

2012-07-30 17:12
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
回复 5楼 zklhp
还有一个奇怪的问题。Irvine32.inc 文件里面包含了其他的inc头文件,这个包含的头文件有很多函数的声明 好象是API函数的。但是竟然没有提供 lib连接库的文件在目录下,找了好久
2012-07-30 17:16
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用爱末流在2012-7-30 17:12:18的发言:

Irvine32 我用该书作者的这些提供的库函数,编译连接后 竟然大小为9KB= =
而不用他的函数库
我直接用windows的。
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

我用windows的API函数。编译连接也就2KB左右的大小而已。
对啊 这就是动态链接和静态链接的区别了 简单来讲 动态链接不会显著增大exe文件的大小 调用API大都是这样实现的 而静态链接会让exe变大
2012-07-30 17:26
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用爱末流在2012-7-30 17:16:17的发言:

还有一个奇怪的问题。Irvine32.inc 文件里面包含了其他的inc头文件,这个包含的头文件有很多函数的声明 好象是API函数的。但是竟然没有提供 lib连接库的文件在目录下,找了好久

关于这个库的问题呢 我就不知道了
2012-07-30 17:26
快速回复:32汇编下为什么不用include user32.inc 声明API函数就可以使用了啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027886 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved