PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
7982 99/09/03 13:44:27 RE(3):PB6: LOOPの中断を行う(Yield 関数を使って)と、アプリケーションエラーになってしまう By Taka
7979 99/09/03 13:09:54 RE(2):PB6: LOOPの中断を行う(Yield 関数を使って)と、アプリケーションエラーになってしまう By おはる
7978 99/09/03 12:25:21 RE(1):PB6: LOOPの中断を行う(Yield 関数を使って)と、アプリケーションエラーになってしまう By Taka
7976 99/09/03 11:43:36 PB6: LOOPの中断を行う(Yield 関数を使って)と、アプリケーションエラーになってしまう By おはる

カテゴリ:スクリプトの記述
日付:1999年09月03日 13:44 発信者:Taka
題名:RE(3):PB6: LOOPの中断を行う(Yield 関数を使って)と、アプリケーションエラーになってしまう

おはるさん、こんにちは。

>>あと、「通信用のDLLを起動」とありますが、非同期制御などをしている場合、中断→終了によって
>>受け取り用の変数アドレスが失われていることも考えられるので要注意です。

>すみません、勉強不足で教えていただきたいのですが、受け取り用の変数アドレスが失われる
>というのはどういうことなのでしょうか?

通信用のDLLが何か解らないので何とも言えないのですが、例えば関数の戻り値を受け取っている変数や、
引数に渡した変数に何らかの値を設定されてくる、というものがありますよね。
同期制御なら問題ないですが、非同期(ポストしていたり、その関数自体が内部的に非同期的な動きを
するなど)で呼び出した場合、「受け取る変数」がスクリプトのローカル変数だと、実際にその関数が
終了して値を設定しようとした時に、すでにその変数がなくなっている場合があるということです。

ところで「通信用DLLを起動」って、いわゆる外部関数を宣言して使うということではないんですか?
(また私の勘違いかも...)

>また、これを回避するにはどのようなことを実行すればよいのかを教えていただけませんか?

非同期で結果が返されても、その変数が存在していればよいのです。つまり、インスタンス変数など
で受け取るようにしておくことで、たいていの場合は回避できます。
(って、エラーになる原因が違うような気がする...)

もし私の勘違いでしたら、この話は忘れてください。余計にややこしくなるので...(^^;ゞ

付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows NT 4.0
DBMS Oracle SQL*Net 8
Browser InternetExplorer3.X

Server SoftWare

OS (記載なし)
DBMS Oracle 8.0
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.