PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
16308 | 01/09/21 21:59:42 | RE(11):BSTR(UNICODE)変換:PB版 By ryochan |
16307 | 01/09/21 20:05:35 | RE(10):BSTR(UNICODE)変換:PB版 By GO |
16285 | 01/09/19 10:27:56 | RE(9):BSTR(UNICODE)変換:PB版 By ryochan |
16284 | 01/09/19 01:15:55 | RE(8):BSTR(UNICODE)変換(2)の訂正(2) By GO |
16275 | 01/09/18 12:48:36 | RE(7):BSTR(UNICODE)変換(2)の訂正(2) By ryochan |
16268 | 01/09/16 21:00:17 | RE(6):外部関数・・・BSTR(UNICODE)変換(2)の訂正 By ryochan |
16267 | 01/09/16 13:12:50 | RE(5):外部関数・・・BSTR(UNICODE)変換(3) By ryochan |
16266 | 01/09/16 13:08:10 | RE(4):外部関数・・・BSTR(UNICODE)変換(2) By ryochan |
16265 | 01/09/16 13:06:52 | RE(3):外部関数・・・BSTR(UNICODE)変換(1) By ryochan |
16264 | 01/09/14 19:10:31 | RE(2):PB7.0: 外部関数について By GO |
16263 | 01/09/14 18:33:38 | RE(1):PB7.0: 外部関数について By ryochan |
16260 | 01/09/14 17:23:22 | PB7.0: 外部関数について By GO |
カテゴリ:スクリプトの記述
日付:2001年09月21日 21:59 発信者:ryochan
題名:RE(11):BSTR(UNICODE)変換:PB版
GOさん、こんばんは。
PB版、ダメでしたか。何でだろう?
結果的に成功ならバンザイですけどね。
私もおかげさまで勉強になりました。
VCの例は解放を忘れてました。スミマセン
(DLL抜けたら大丈夫かな。
でもちゃんと解放癖つけとかないといけないですね。)
>_snprintf(cpSTS, 2, \"%s\", bstrSTS); <---仕様が2バイトなので合わしました
>_snprintf(cpDATA,1024, \"%s\", bstrDATA); <---こちらは可変長です
UNICODE->ASCII変換はいらなかったのですか?
(これでPB側は認識できたのですね。もしかして
対象の関数内でやってくれてたのですか?)
それは置いといて、ちょっと気になった箇所があります。
これだと、PB側で予めメモリ領域を確保しておかない
とメモリ破壊になります。
(1024バイトまでOKと関数で設定しておきながら、
もし、bstrDATAが200バイトでPBのstring変数
が100バイトしかなかったらどうなりますか?)
stringの領域は\\0までですからね。
またstringによるメモリ確保はスペースや文字でないとで
きませんから私は敢えてstring(可変長)にしませんでした。
なので、固定長char配列の方がいいと思います。
また、明示的にサイズも指定させないと、渡すメモリは
何バイトかどうか分からないので(strlenも\\0までの長さを返す)、
引数に入れた方がいいです。
Win32APIも、関数によって変更が期待される文字列については
サイズを指定する引数が存在します。
これはこれらの理由からだと思います。
付加情報:
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.