PB 電子会議室
カテゴリ:ユーザオブジェクト
日付:2001年02月09日 20:54 発信者:Taka
題名:RE(16):PB6.5: 関数の引数に、値(VALUE)としてDW型を指定した場合に、オリジナルが変更されるのは?
ryochanさん、こんばんは。
(他の方には苦痛だろうなこのスレッド...苦笑)
決して迷惑とは思っていないので、どうかお気になさらずに。
今回の議論は、お互いによく解らなかった部分がクリアになった事で、
大変有望なものだったと思います。
私の場合:
・ハンドルではなくアドレスだったこと(考え方は大差ない)
・ポインタについて少しだけ理解できたこと
ryochanさんの場合:
・value渡し/ref渡しの関数の、PBのクセ(?)を再確認できたこと
ここで、ポインタについて面白い実験をしてみました。
(今回の件とは無関係ですけど)
PBのスクリプトで、宣言した変数のアドレスを強引に取得する方法として
lstrcatAを使う方法が紹介されています。
これを使って、datastore型の変数のアドレスを拾ってみました。
datastore ds_a, ds_b
MessageBox( \"addr1\", lstrcatA(ds_a,\"\") )
f_get_datastore(ds_a) //既に生成済の他のDSを ref引数で取得
MessageBox( \"addr2\", lstrcatA(ds_a,\"\") )
ds_a = ds_b
MessageBox( \"addr3\", lstrcatA(ds_a,\"\") )
上のMessageBoxは、3回とも同じアドレスを返します。
long型やdate型などで試しても同じ結果になりました。
ところが、同じことをstring型や 動的配列の変数で実験すると、
毎回違う値を返してきます。
ということは、サイズが変わる可能性のある変数の場合は、
代入文やref引数で受け渡しする際、PBが内部的に(勝手に)
新しい領域を確保し直していると思われます。
これがPBのクセだと言ってしまえばそれまでですが、C/C++などで
ポインタの扱いに慣れている方にとっては悩ましいところですね。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows98
DBMS Oracle SQL*Net 8
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS Oracle 8.0
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.