PB 電子会議室
カテゴリ:PowerBuilderの開発環境
日付:2000年08月31日 14:49 発信者:Taka
題名:RE(9):PB6.5: win32 API関数 GetOpenFileName()の使用方法について:サンプル2
ryochanさん、こんにちは。
>MemCopy(l_filesbuff,ofn.lpstrfile,1024)
ここでのMemCopyは不要です。
ofn.lpstrFileには、固定長blobで確保した l_FilesBuffのアドレスが入っているんですよね。
このアドレスを示す数値は、APIのコール前後で変わることはありません。
であれば、GetOpenFileNameAから戻ってきた時点で、l_FilesBuffには既に文字列が代入されているはずです。
APIの中で、戻したいバッファが別のメモリアドレスに置き換わるというのなら解りますが、
ほとんどのAPIではそのような動きはしないと思います。
だから、事前にメモリ領域を確保する必要があり、同時にそのバイト数もAPIに渡す必要が
あるのだと思います。(私の認識が間違っていたらご指摘ください)
>//ファイル情報を配列に格納
>//超汚い処理だと思います。誰か良い方法があればお願いします。
0x00区切りを分解する時のロジックって、blob{1024}を使っても char[1024]を使っても、
なんかスッキリ書けないですよね。(^^;
以下は私がよくやる方法です。ご参考にどうぞ。(もう少しなんとかしたいけど...)
// 後処理(blobの中身を0x00区切りで分解してstring[]に代入する)
string dmy, path[]
uint pos, ary
for pos = 1 to 1024
dmy = String( BlobMid(b_FileName,pos)) //b_FileNameは、blob{1024}の変数です
if dmy = \'\' then exit
ary ++
path[ary] = dmy
pos += Len(dmy)
next
※ path[1]にはディレクトリが、path[2]以降には選択した複数ファイルが入ります。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows NT 4.0
DBMS Oracle SQL*Net 8
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS Oracle 8.0
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.