类型为 nativeLibrary 的库部件

类型为 nativeLibrary 的库允许 EGL 生成的 Java™ 代码调用单个在本地运行的 DLL。该 DLL 的代码不是用 EGL 语言编写的。有关开发基本库(包含 EGL 语言编写的共享函数和值)的信息,请参阅类型为 basicLibrary 的库部件

在类型为 nativeLibrary 的库中,每个函数的用途在于为 DLL 函数提供接口。不能在 EGL 函数中定义语句,也不能在库中的任何位置声明变量或常量。

EGL 运行时通过使用 EGL 函数属性 alias 的设置(缺省为 EGL 函数名)来访问基于 DLL 的函数。如果基于 DLL 的函数的名称不符合命名约定中描述的约定,则明确设置该属性。

库属性 callingConvention 指定 EGL 运行时如何在下列两种代码之间传递数据:
现在对 callingConvention 可用的唯一值是 I4GL

库属性 dllName 指定 DLL 名称,这是最终名称;在部署时不能覆盖它。如果未对库属性 dllName 指定值,则必须在 Java 运行时属性 vgj.defaultI4GLNativeLibrary 中指定 DLL 名称。因为只有一个这样的 Java 运行时属性对运行单元可用,所以除了在 EGL 库中标识的 DLL 之外,只能指定一个 DLL。

不管您是在开发时(在 dllName 中)还是在部署时(在 vgj.defaultI4GLNativeLibrary)指定 DLL 名称,该 DLL 必须驻留在运行时变量中标识的目录路径中;该变量为 PATH(在 Windows® 2000/NT/XP 上)或 LIBPATH(在 UNIX® 平台上)。

库函数将自动声明为公用函数以确保它们在库外部可用。在其它 EGL 代码中,可以在不指定库名的情况下引用函数(仅使用其函数别名),但仅当将该库包括在特定于程序的使用声明中时才能这样做。

EGL 库被生成为 Java 类,该类与访问该库的代码和 DLL 是分开的。EGL 运行时通过使用库属性 alias 的设置(缺省为 EGL 库名)来访问该类。如果库部件的名称不符合 Java 约定,则明确设置该属性。

在运行时,当第一次使用 DLL 时会将其装入,并在访问该程序或页面处理程序离开内存(在运行单元结束时)时卸装该库。

每当装入页面处理程序时,该页面处理程序都将获得 DLL 的新副本。并且,对于被类型为 basicLibrary 的 EGL 库调用的 DLL,只要调用库在内存中,被调用的 DLL 也会在内存中。

以下本地库提供对用 C 编写的 DLL 的访问:
  Library myLibrary type nativeLibrary
  {callingConvention=”I4GL”, dllname=”mydll”}
	
    Function entryPoint1( p1 int nullable in, 
                          p2 date in, p3 time in, 
                          p4 interval in, p5 any out) 
    	end

    	Function entryPoint2( p1 float in, 
                          p2 String in, 
                          p3 smallint out)
    	end

    	Function entryPoint3( p1 any in, 
                          p2 any in, 
                          p3 any out, 
                          p4 CLOB inout)
    	end
  end
    

相关概念
Java 运行时属性
类型为 basicLibrary 的库部件

相关参考
EGL 源格式的函数部件
Java 运行时属性(详细信息)
EGL 源格式的库部件
命名约定
运行单元
使用声明

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.