9.1D是在“主机级别的调用接口”当然,古代的,过时的和不支持的,但即便如此它的文档,支持将C例程调用为DLL。对于一些详细的例子,你可能会发现UNIX Shared Libraries这个演示文稿很有帮助。 (底层细节有所不同,但同样的想法适用于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人员将能够轻松处理。
最简单的方法是做简单的旧的简单参数(如上图)。可能每次都有一条记录(取决于你的功能在做什么,或者可能没有意义 - 如果你需要一组记录来处理,那么你需要收集它们并以某种方式管理它们)。
如果确实需要创建结构并使用存储器构建它们,则必须与4GL人紧密合作来定义API并同意memptr应该是什么样子。我认为这可能是很多工作 - 我会尽量避免它,并找到一种方法,如果我可以用简单的参数。