文章目录
$ZF(-4)
提供与$ZF(-5)
和$ZF(-6)
一起使用的工具函数。
大纲
$ZF(-4,1,dll_name)
$ZF(-4,n,dll_id,func_name)
$ZF(-4,n,dll_id,decr_flag)
$ZF(-4,n,dll_index,dll_name)
$ZF(-4,n,dll_index,decr_flag)
参数
- n 要执行的操作类型的代码:1 =按名称加载DLL。 2 =通过id卸载DLL。 3 =通过id在DLL中查找功能。 4 =按索引卸载DLL。 5 =在系统DLL索引表中创建一个条目。 6 =删除系统DLL索引表中的条目。 7 =在进程DLL索引表中创建一个条目。 8 =删除进程DLL索引表中的条目。
- dll_name 动态链接库(DLL)的名称。与n = 1、5或7一起使用。
- dll_id 已加载的动态链接库(DLL)的ID值。与n = 2或3一起使用。
- dll_index DLL索引表中动态链接库(DLL)的用户定义索引。必须是唯一的,正的,非零的整数。 1024到2047之间的数字保留供系统使用。与n = 4、5、6、7或8一起使用。
- func_name 在DLL中查找的函数的名称。仅在n = 3时使用。
- decr_flag 可选-用于减少DLL参考计数的标志。与n = 2或4一起使用。
描述
$ZF(-4)
可用于为动态链接库或动态链接库中的函数建立标识值。$ZF(-5)
使用这些标识值来执行一个函数。
$ZF(-4)
可用于建立动态链接库索引表的索引。$ZF(-6)
使用这些索引值来执行一个函数。
-
可以使用
$ZF(-4,1)
显式加载共享库,这将加载一个库并返回一个句柄,该句柄可用于使用$ZF(-5)
访问库函数。 -
可以使用
$ZF(-3)
显式加载单个共享库,它加载单个活动库并调用其方法。 -
在用
$ZF(-4,5)
或$ZF(-4,7)
索引库之后,可以使用$ZF(-6)
隐式加载共享库。
建立标识值
要加载动态链接库并返回其标识,请使用以下语法:
dll_id=$ZF(-4,1,dll_name)
要从由$ZF(-4,1)
加载的动态链接库中查找一个函数,并返回该函数的标识,请使用以下语法:
func_id=$ZF(-4,3,dll_id,func_name)
要执行由$ZF(-4,3)
定位的函数,请使用$ZF(-5)
。
要卸载由$ZF(-4,1)
加载的特定动态链接库,请使用以下语法:
$ZF(-4,2,dll_id)
要卸载由$ZF(-4,1)
加载的所有dll,请使用以下语法:
$ZF(-4,2)
增加和减少动态链接库加载
当两个类加载了同一个库时,该库将通过第一次调用$ZF(-4,2,dll_id)
或$ZF(-4,4,dll_index)
来卸载。这可能会使另一个类无法访问库。因此,Caché支持对每个DLL进行引用计数。Caché维护库加载$ZF
的次数的引用计数$ZF(-4,1,dll_name)
。对$ZF(-4,1,dll_name)
的每次调用都会增加引用计数。
$ZF(-4,2)
提供了一个可选的减量标志参数decr_flag
。对$ZF(-4,2,dll_id,1)
的每次调用都会将引用计数减1。如果引用计数为零,对$ZF(-4,2,dll_id,1)
的调用将卸载库。对$ZF(-4,2,dll_id)
(或$ZF(-4,2,dll_id,0)
)的调用会忽略引用计数并立即卸载库。
对$ZF(-4,5)
或$ZF(-4,7)
的调用建立了一个库索引。随后调用$ZF(-6)
来执行一个函数,隐式加载库并增加引用计数。对$ZF(-4,4,dll_index,1)
的每次调用都会将此引用计数减1。
由dll_name和dll_index建立的引用计数之间的引用计数交互如下:
- 除非引用计数为零,否则用
$ZF(-4,1,dll_name)
加载的库不会通过调用$ZF(-4,4,dll_index,1)
卸载。 - 加载了
$ZF(-4,1,dll_name)
的库会立即由$ZF(-4,2,dll_id)
或$ZF(-4,4,dll_index)
(不带减量标志参数)卸载,而不考虑引用计数。 - 用
$ZF(-6)
隐式加载的库不会被$ZF(-4,2,dll_id,1)
卸载,即使引用计数为零;它们只能由$ZF(-4,4,dll_index,1)
卸载。 - 用
$ZF(-6)
隐式加载的库立即由$ZF(-4,2,dll_id)
或$ZF(-4,4,dll_index)
(不带减量标志参数)卸载,而不考虑引用计数。
不带dll_id
参数的$ZF(-4,2)
会立即卸载所有库,而不考虑引用计数,也不考虑它们是加载了$ZF(-4,1,dll_name)
还是隐式加载了$ZF(-6)
。
建立索引值
要在系统动态链接库索引表中索引动态链接库,请使用以下语法:
$ZF(-4,5,dll_index,dll_name)
要在进程动态链接库索引表中索引动态链接库,请使用以下语法:
$ZF(-4,7,dll_index,dll_name)
要查找并执行由$ZF(-4,5)
或$ZF(-4,7)
索引的函数,请使用$ZF(-6)
。
要卸载索引动态链接库,请使用以下语法:
$ZF(-4,4,dll_index)
要删除系统动态链接库索引表中的索引条目,请使用以下语法:
$ZF(-4,6,dll_index)
要删除进程动态链接库索引表中的索引条目,请使用以下语法:
$ZF(-4,8,dll_index)
要删除进程动态链接库索引表中的所有索引条目,请使用以下语法:
$ZF(-4,8)
$ZF(-5)
执行使用$ZF(-4)
加载的动态链接库函数。
大纲
$ZF(-5,dll_id,func_id,args)
参数
- dll_id 由
$ZF(-4)
提供的动态链接库的标识值。 - func_id 由
$ZF(-4)
提供的动态链接库中函数的标识值。 - args 可选—传递给被调用函数的一个或多个参数。
描述
要执行使用$ZF(-4)
加载的动态链接库中的函数,请使用以下语法:
return=$ZF(-5,dll_id,func_id,args)
$ZF(-6)
执行用$ZF(-4)
索引的动态链接库函数。
大纲
$ZF(-6,dll_index,func_ID,args)
参数
- dll_index 在动态链接库索引表中用户指定的动态链接库文件名的索引,从$ZF(-4)。
-
func_ID
可选 - 由$ZF(-4)
提供的动态链接库中函数的标识值。如果省略,调用验证DLL_index的有效性,加载图像,并返回图像位置。 - args 可选—要传递给函数的参数(如果有),指定为逗号分隔列表。图像,并返回图像位置。
描述
$ZF(-6)
提供了一个快速动态链接库(DLL)函数接口,使用用户定义的索引作为DLL文件名。通过分配一个整数(dll_index)来唯一地与一个dll_name相关联,可以在$ZF(-4)
中建立这个用户定义的索引。可以将此条目放在进程动态链接库索引表或系统动态链接库索引表中。
$ZF(-5)
和$ZF(-6)
都可以用来执行动态链接库中的函数。它由$ZF(-4)
定位。