Foxtable(狐表)用户栏目专家坐堂 → 义全局代码的API时Lib和Alias两个关键字分别是什么意思?


  共有5608人关注过本帖树形打印复制链接

主题:义全局代码的API时Lib和Alias两个关键字分别是什么意思?

帅哥哟,离线,有人找我吗?
wwwzhucom
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:91 积分:844 威望:0 精华:0 注册:2013/6/1 14:59:00
义全局代码的API时Lib和Alias两个关键字分别是什么意思?  发帖心情 Post By:2013/6/1 15:04:00 [只看该作者]

大家好,在foxtable中,在定义全局代码的API时Lib和Alias两个关键字分别是什么意思啊?求解!

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/6/1 15:07:00 [只看该作者]

LIB是指你要使用的DLL文件名称,重名的时候需要使用的,AliAS 是说原本名称为 XXX
[此贴子已经被作者于2013-6-1 15:50:59编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
wwwzhucom
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:91 积分:844 威望:0 精华:0 注册:2013/6/1 14:59:00
  发帖心情 Post By:2013/6/1 15:38:00 [只看该作者]

哦,谢谢你啊,还有一个问题就是,在Alias重命名的某个名称后有一对括号,并且有的有参数,有的没有,还有返回值类型,这些都起什么作用呢?在写代码时直接使用重命名的名称就可以了吗?


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/6/1 15:49:00 [只看该作者]

*.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
[此贴子已经被作者于2013-6-1 15:50:12编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
wwwzhucom
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:91 积分:844 威望:0 精华:0 注册:2013/6/1 14:59:00
  发帖心情 Post By:2013/6/1 17:18:00 [只看该作者]

谢谢了,我在命令窗口调用*dll中的函数时,提示无法找到我要调用这个函数的入口点什么意思?如下图

图片点击可在新窗口打开查看

[此贴子已经被作者于2013-6-1 17:20:43编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/6/1 17:21:00 [只看该作者]

图片点击可在新窗口打开查看我的意思是通配  * 代表所有字符啦.意思是某个.DLL

 回到顶部
帅哥哟,离线,有人找我吗?
wwwzhucom
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:91 积分:844 威望:0 精华:0 注册:2013/6/1 14:59:00
  发帖心情 Post By:2013/6/1 17:29:00 [只看该作者]

这个我知道,例如下面定义的这个API函数:

Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

在命令窗口调用CopyFileA这个函数时,它会提示无法在Dll"kernel32.dll"中找到“CopyFileA”这个函数的入口点,但这个函数确实存在啊


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/6/1 17:35:00 [只看该作者]

你在命令窗口应该是调用  CopyFile才对的啊  你都已经改名了

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/6/1 17:38:00 [只看该作者]

而且,你不要用Private  要用public 

 回到顶部
帅哥哟,离线,有人找我吗?
wwwzhucom
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:91 积分:844 威望:0 精华:0 注册:2013/6/1 14:59:00
  发帖心情 Post By:2013/6/3 17:26:00 [只看该作者]

还是不行啊,是用vs2010来编写的类文件,并编译成dll的,提示在那个dll中找不到那个函数的入口点

下面是在全局代码中定义这两个函数的代码:

Public Declare Function CharacterToCoding lib "VBHanZiKu.dll" Alias "CharacterToCoding" (byval Character As  String) As String

Public Declare Function CodingToCharacter lib "VBHanZiKu.dll" Alias "CodingToCharacter" (byval coding As String) As String

 

类库文件名是:VBHanZiKu.dll

 

里面有用vb写的两个函数,分别是:CharacterToCoding  和 CodingToCharacter,在命令窗口调用CharacterToCoding这个函数时,出现在Dll“VBHanZiKu.dll”中找不到“CharacterToCoding”函数的入口点这个问题,开始时也添加了外部引用,不知道怎么回事!

 

附件中是出现错误的截图及dll动态链接库,请帮我查下这个原因,谢谢了!


 回到顶部
总数 11 1 2 下一页