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應該是什麼樣子。我認爲這可能是很多工作 - 我會盡量避免它,並找到一種方法,如果我可以用簡單的參數。