文章目录
- 第十九章 调用Callout Library函数 - 将 $ZF(-5) 与多个库和许多函数调用一起使用
- 将 `$ZF(-5)` 与多个库和许多函数调用一起使用
第十九章 调用Callout Library函数 - 将 $ZF(-5) 与多个库和许多函数调用一起使用
将 $ZF(-5) 与多个库和许多函数调用一起使用
 
Method GraphSomeData(loopsize As %Integer=100000) As %Status{// load libraries and get system-defined ID valuesset 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 itemsset count = 0do {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 outputfor 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) 接口相同的虚拟内存空间中。