api定义中的lib和alias是什么意思啊?
答案:3 悬赏:80 手机版
解决时间 2021-03-29 10:40
- 提问者网友:龅牙恐龙妹
- 2021-03-28 23:55
api定义中的lib和alias是什么意思啊?
最佳答案
- 五星知识达人网友:轮獄道
- 2021-03-29 01:05
Api函数声明的格式:
[Private|Public] Declare Function|Sub 函数名 Lib "库名" [Alias "别名"] (参数列表) [As 返回值类型]
红色的内容为系统保留字.[]为可选内容.
Private|Public表Api函数的作用域:私有或共有.
Function|Sub表Api函数的类型 Function为函数 Sub为过程(无返回值的函数需转成该类型)
Lib "库名" 表Api函数所在的库文件文件名及路径.
[Alias "别名"] 表Api函数的别名,当Api函数与某个关键字重名时,就可以使用这个参数。
(参数列表) 中 Byval 表值引用,ByRef表地址引用(*),缺省为ByRef.
[As 返回值类型] 表Api返回的类型
举例:某SDK中提供A.Dll文件(存在在D:\下).其中某个函数C原型如下:
int Add(int a,int b);
我们做如下声明:
Public Declare Function Add "D:\A.dll" (Byval a as Long,Byval b as Long) as Long
对于你经常用的SDK Api函数你可以做成Api 声明文件.格式可以参照上面WIN32API.TXT的格式进行编写.以后要用到它们时直接就可以用Api Viewer调用它们就可以了.对于Win32Api.Txt里的系统深层Api函数,你也可以自行加入以方便自已的使用.
[Private|Public] Declare Function|Sub 函数名 Lib "库名" [Alias "别名"] (参数列表) [As 返回值类型]
红色的内容为系统保留字.[]为可选内容.
Private|Public表Api函数的作用域:私有或共有.
Function|Sub表Api函数的类型 Function为函数 Sub为过程(无返回值的函数需转成该类型)
Lib "库名" 表Api函数所在的库文件文件名及路径.
[Alias "别名"] 表Api函数的别名,当Api函数与某个关键字重名时,就可以使用这个参数。
(参数列表) 中 Byval 表值引用,ByRef表地址引用(*),缺省为ByRef.
[As 返回值类型] 表Api返回的类型
举例:某SDK中提供A.Dll文件(存在在D:\下).其中某个函数C原型如下:
int Add(int a,int b);
我们做如下声明:
Public Declare Function Add "D:\A.dll" (Byval a as Long,Byval b as Long) as Long
对于你经常用的SDK Api函数你可以做成Api 声明文件.格式可以参照上面WIN32API.TXT的格式进行编写.以后要用到它们时直接就可以用Api Viewer调用它们就可以了.对于Win32Api.Txt里的系统深层Api函数,你也可以自行加入以方便自已的使用.
全部回答
- 1楼网友:西风乍起
- 2021-03-29 03:01
个人以为没必要知道,只需要知道api的名称就行了。
(高手别骂我!)
(高手别骂我!)
- 2楼网友:末日狂欢
- 2021-03-29 02:26
API函数都是被打包到一个个*.dll文件中的,这个容纳API函数的*.dll文件就是一个函数库,lib关键字就是指你准备调用的API函数名位于什么样的函数库(dll文件)中。如果你有Depends工具(这个工具装了VC++ 6.0就有),可以用这个工具打开这些*.dll文件,你会发现里面有很多很多的函数名称,这些函数都对应了一个API,但是*.dll文件中的函数名称可能和你前面Declare部分的名称不一致,那么alias关键字就是说明*.dll文件中的API函数名称叫什么名字的,如果*.dll文件中的函数名称与前面Declare部分的名称一致,alias就可以省略不写。
例如API函数CopyFile,包括MSDN对这个API函数的描述都是用的是CopyFile这个名称,这个函数被保存在kernel32.dll文件中,而且在kernel32.dll中这个API对应的名称叫"CopyFileA",kernel32.dll中是找不到"CopyFile"这个名称的函数的,所以在定义这个API的时候先声名固定部分:
Private Declare
然后注意CopyFile函数是有返回值的,所以接着写:
Function CopyFile
后面接着写API函数的库名称:
Lib "kernel32.dll" (因为库都是dll文件,也可以省略写成Lib "kernel32")
由于库文件中的API名称不是"CopyFile",所以下面写:
Alias "CopyFileA"
然后写这个API的参数部分,参数用括号包含起来:
(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long)
函数最后是有返回值的,在括号后跟着写:
As Long
这里就完成了整个API函数的声明。
把以上内容连接起来写就是:
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
例如API函数CopyFile,包括MSDN对这个API函数的描述都是用的是CopyFile这个名称,这个函数被保存在kernel32.dll文件中,而且在kernel32.dll中这个API对应的名称叫"CopyFileA",kernel32.dll中是找不到"CopyFile"这个名称的函数的,所以在定义这个API的时候先声名固定部分:
Private Declare
然后注意CopyFile函数是有返回值的,所以接着写:
Function CopyFile
后面接着写API函数的库名称:
Lib "kernel32.dll" (因为库都是dll文件,也可以省略写成Lib "kernel32")
由于库文件中的API名称不是"CopyFile",所以下面写:
Alias "CopyFileA"
然后写这个API的参数部分,参数用括号包含起来:
(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long)
函数最后是有返回值的,在括号后跟着写:
As Long
这里就完成了整个API函数的声明。
把以上内容连接起来写就是:
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯