在持久过程函数中打开 STREAM

Opening a STREAM in a Persistent Procedure Function

我有一个持续过程,我在其中尝试打开、写入和关闭流。

我在主区有程序

DEFINE STREAM sOutFile.
OPEN STREAM sOutFile TO VALUE( outFileName ).
MESSAGE SEEK( sOutFile ).

然后是持久过程中的一个函数

FUNCTION example RETURN LOGICAL:
  MESSAGE SEEK( sOutFile ).
  PUT STREAM sOutFile UNFORMATTED someData.
END.

实例化持久过程时,消息显示“0”,表示流已打开。但是,调用示例时,消息显示“?”我收到一条关于尝试写入已关闭流的消息。

我已经尝试声明流 NEW SHARED 但这没有任何区别。

我做错了什么,还是无法在持久过程中定义流?

时间还早,我的咖啡还没有开始,但我认为你必须在 PP body 之外打开流。

这个有效:

/* ppstream.p
 *
 */

define stream logStream.

session:add-super-procedure( this-procedure ).

/* end of PP init */

function initLog returns logical ( input lgFile as character ):
  output stream logStream to value( lgFile ) unbuffered.
  return true.
end.

function logStuff returns logical ( input msg as character ):
  put stream logStream unformatted msg skip.
  return true.
end.

然后这样称呼它:

function initLog  returns logical ( input lgFile as character ) in super.
function logStuff returns logical ( input msg as character ) in super.

run ./ppstream.p persistent.

initLog( "log.txt" ).
logStuff( "test" ).

(我使用 session super-procedure 来避免必须定义句柄——您不一定需要那样做。)