第十九章 调用Callout Library函数 - 将 $ZF(-5) 与多个库和许多函数调用一起使用
2024-01-10 09:28:30
第十九章 调用Callout Library函数 - 将 $ZF(-5) 与多个库和许多函数调用一起使用
将 $ZF(-5)
与多个库和许多函数调用一起使用
Method GraphSomeData(loopsize As %Integer=100000) As %Status
{
// load libraries and get system-defined ID values
set InputLibID = $ZF(-4,1,"c:\intersystems\iris\bin\inputlibrary.dll")
set OutputLibID = $ZF(-4,1,"c:\intersystems\iris\bin\outputlibrary.dll")
set fnGetData = $ZF(-4,3,InputLibID,"GetData")
set fnAnalyzeData = $ZF(-4,3,OutputLibID,"AnalyzeData")
set fnPlotPoint = $ZF(-4,3,OutputLibID,"PlotPoint")
set fnWriteData = $ZF(-4,3,OutputLibID,"WriteData")
// call functions from each library until we have 100000 good data items
set count = 0
do {
set datapoint = $ZF(-5,InputLibID,fnGetData)
set normalized = $ZF(-5,OutputLibID,fnAnalyzeData,datapoint)
if (normalized'="") { set flatdata($INCREMENT(count)) = normalized }
} while (count<loopsize)
set status = $ZF(-4,2,InputLibID) //unload "inputlibrary.dll"
// plot results of the previous loop and write to output
for point=1:1:count {
set list = $ZF(-5,OutputLibID,fnPlotPoint,flatdata(point))
set x = $PIECE(list,",",1)
set y = $PIECE(list,",",2)
set sc = $ZF(-5,OutputLibID,fnWriteData,flatdata(point),x,y,"outputfile.dat")
}
set status = $ZF(-4,2,OutputLibID) //unload "outputlibrary.dll"
quit 0
}
-
对
$ZF(-4,1)
的调用将标注库inputlibrary.dll
和outputlibrary.dll
加载到虚拟内存中,并为其返回系统定义的库ID
。 -
对
$ZF(-4,3)
的调用使用库ID
和函数名称来获取库函数的ID
。返回的函数ID
实际上是ZFEntry
表序列号(请参阅上一章中的“创建ZFEntry
表”)。 -
第一个循环使用
$ZF(-5)
调用每个库中的函数:inputlibrary.dll
中的GetData()
函数从某个未指定的源读取原始数据。outputlibrary.dll
中的AnalyzeData()
函数可以对原始数据进行标准化,也可以拒绝它并返回一个空字符串。- 每个标准化数据点都存储在
flatdata(count)
中(其中第一次调用ObjectScript
函数$INCRMENT
创建count
并将其初始化为1
)。
默认情况下,循环获取
100000
个项目。由于两个库都已加载并保留在内存中,因此在两个不同库之间切换没有处理开销。- 第一个循环结束后,不再需要库
inputlibrary.dll
,因此调用$ZF(-4,2)
来卸载它。库outputlibrary.dll
将保留在内存中。 - 第二个循环处理数组
flatdata
中的每个项目并将其写入文件中某个未指定的位置:- 库函数
PlotPoint()
读取该项目并返回一个以逗号分隔的字符串,其中包含将绘制该项目的坐标(有关库函数如何返回多个输出参数的说明,请参阅“链接简介”)。 $PIECE
函数用于从字符串中提取坐标值x
和y
。- 库函数
WriteData()
将项目和坐标存储在文件outputfile.dat
中,其他应用程序将使用该文件来打印图形。
- 库函数
- 第二个循环完成后,再次调用
$ZF(-4,2)
来卸载库outputlibrary.dll
。
以下部分介绍 $ZF(-6)
接口,它将库加载到与 $ZF(-5)
接口相同的虚拟内存空间中。
文章来源:https://blog.csdn.net/yaoxin521123/article/details/135494395
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!