PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
13080 00/09/04 21:47:20 RE(17):PBでのポインタの使用 (2) By Taka
13079 00/09/04 21:43:17 RE(16):PBでのポインタの使用 (1) By Taka
13068 00/09/04 12:34:03 RE(15):PB6.5: win32 API関数の使用方法について→PBでのポインタの使用:その2 By ryochan
13067 00/09/04 12:29:11 RE(14):PB6.5: win32 API関数の使用方法について→PBでのポインタの使用:その1 By ryochan
13056 00/09/01 11:50:20 RE(13):PB6.5: win32 API関数 GetOpenFileName()の使用方法について By star6
13054 00/09/01 11:01:00 RE(12):PB6.5: win32 API関数 GetOpenFileName()の使用方法について By SK
13051 00/09/01 02:29:56 RE(11):PB6.5: win32 API関数 GetOpenFileName()の使用方法について By Taka
13050 00/09/01 00:49:45 RE(10):PB6.5: win32 API関数 GetOpenFileName()の使用方法について By ryochan
13043 00/08/31 14:49:29 RE(9):PB6.5: win32 API関数 GetOpenFileName()の使用方法について:サンプル2 By Taka
13042 00/08/31 14:32:41 RE(8):PB6.5: win32 API関数 GetOpenFileName()の使用方法について By Taka
13040 00/08/31 11:22:00 RE(7):PB6.5: win32 API関数 GetOpenFileName()の使用方法について:サンプル2 By ryochan
13039 00/08/31 11:24:44 RE(6):PB6.5: win32 API関数 GetOpenFileName()の使用方法について:サンプル1 By ryochan
13036 00/08/31 11:08:20 RE(5):PB6.5: win32 API関数 GetOpenFileName()の使用方法について By ryochan
13035 00/08/31 10:32:41 RE(4):PB6.5: win32 API関数 GetOpenFileName()の使用方法について By Taka
13024 00/08/30 15:03:26 RE(3):PB6.5: win32 API関数 GetOpenFileName()の使用方法について By Taka
13023 00/08/30 14:45:35 RE(2):PB6.5: win32 API関数 GetOpenFileName()の使用方法について By SK
13020 00/08/30 13:27:57 RE(1):PB6.5: win32 API関数 GetOpenFileName()の使用方法について By Taka
13019 00/08/30 12:10:54 PB6.5: win32 API関数 GetOpenFileName()の使用方法について By star6

カテゴリ:PowerBuilderの開発環境
日付:2000年09月04日 12:34 発信者:ryochan
題名:RE(15):PB6.5: win32 API関数の使用方法について→PBでのポインタの使用:その2

...続き
構造体については、もう少し追求しようとテストしてみました。
例えばこんな感じです。
実験1
 ・構造体のポインタを引数にもつDLL関数がある(作成する)。
 ・その構造体のメンバの型がwchar_tで、DLL関数内で値がセットされる。
 PBでは
 ・構造体のメンバはstring型で宣言する。
 ・外部関数の引数でref 構造体と宣言する。
 PB側で、メンバに変数について領域を確保し
 そのDLL関数をPBから実行すると、正常にPB側で構造体のメンバ変数
 に値が格納されている。
>APIには構造体のアドレスを渡すだけなので、
>各メンバ変数がさらにポインタ変換されることはないはずです。
これは、構造体のメンバは値渡しであることをおっしゃっているのですよね。
となると、これと矛盾し、メンバも参照渡し(ポインタ変換)
されているとしか思えないのですが...?

ではさらに、Takaさんがおっしゃった
FILEOPENNAMEのメンバ変数が値渡しであるということを確認するために
実験2
 前回の発言のGetCurrentDirectoryAについて
 バッファアドレスを格納したlong変数について
 ref宣言で呼び出してしまうと、Win98ではGPFが発生してし、
 当たり前ですが、やはりうまくいきませんでした。
このような方法は値渡しでないとうまく
いかないということになります。

結果をまとめると、
今回のFILEOPENNAME構造体の場合は、メンバ変数は値渡し、
私がテストで作成した構造体の場合は、メンバ変数は参照渡し
となります。

以上より、
構造体のメンバについて、
・DLL側がポインタ型の場合はそのまま値渡し
・DLL側がポインタ以外の場合は参照渡し
ということになります。
この考察について、意見がある場合は宜しくお願いします。


付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows NT 4.0
DBMS Oracle SQL*Net 8
Browser (記載なし)

Server SoftWare

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

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