在持久过程函数中打开 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 来避免必须定义句柄——您不一定需要那样做。)
我有一个持续过程,我在其中尝试打开、写入和关闭流。
我在主区有程序
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 来避免必须定义句柄——您不一定需要那样做。)