当然,9.1D 是古老的、过时的和不受支持的,但即便如此,它也支持将 C 例程作为 DLL 调用。对于一些详细的示例,您可能会发现此关于UNIX 共享库的演示文稿很有帮助。(血淋淋的细节有所不同,但如果这是您的环境,相同的想法适用于 Windows。)
4GL端的简单示例:
define variable x as integer no-undo.
define variable c as memptr no-undo.
define variable m as memptr no-undo.
procedure sprintf external "/lib64/libc.so.6":
define input-output parameter fStr as memptr.
define input parameter mask as memptr.
define input parameter arg as double.
define return parameter x as long.
end.
set-size( c ) = 1024.
set-size( m ) = 1024.
put-string( m, 1 ) = "%1.4e".
run sprintf( input-output c, m, 0.0123, output x ).
display get-string( c, 1 ) format “x(20)”.
return.
作为 C 程序员,您的主要问题是提供 API 和数据结构,4GL 人员将能够轻松使用。
最简单的方法是只做普通的旧简单参数(如上)。可能一次一个记录(取决于您的功能正在做什么,这可能有意义,也可能没有意义——如果您需要一组记录来处理,那么您需要收集它们并以某种方式管理它们)。
如果确实需要创建结构并使用 mempr 构建它们,您将不得不与 4GL 人员密切合作来定义 API 并就 mempr 的外观达成一致。我认为这可能需要做很多工作——如果可以的话,我会尽量避免它并找到一种使用简单参数的方法。