在持久过程函数中打开STREAM

时间:2015-07-08 09:48:48

标签: progress-4gl openedge

我有一个持久的过程,我试图打开,写入和关闭一个流。

我在程序的主要范围内

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”,因此已打开流。但是,调用示例时,消息显示“?”我收到一条关于尝试写入封闭流的消息。

我已尝试声明新共享流,但这没有任何区别。

我做错了什么,或者在持久性程序中定义流是不可能的?

1 个答案:

答案 0 :(得分:2)

现在还早,我的咖啡还没开,但我认为你必须打开PP体外的水流。

这有效:

/* 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" ).

(我使用会话超级程序来避免必须定义句柄 - 你不一定需要这样做。)