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日 20:05 発信者:GO
題名:RE(10):BSTR(UNICODE)変換:PB版

ryochanさん、こんばんは。返事が遅くなってすみません。

PBだけで変換するやり方を試してみましたが、こちらではダメでした・・・。
固定の文字をUNICODE変換→ASCII変換するのはうまくいったのですが、実際のDLLの戻り値は変換すると
文字化けしてしまいました。というわけで、ryochanさんのVCのサンプルを殆どそのまま使う形で新たに
DLLを作成しました。

[PB側]
Function int ReceiveData(Int No, Ref String STS, Ref String ResDATA) &
                         Library \"PCardsub.DLL\"  Alias For _ReceiveDataA@28 ←名前が変わった
[VC側]
extern \"C\"
{
__declspec(dllexport) int WINAPI ReceiveDataA(short int, LPTSTR, LPTSTR);
}
int WINAPI ReceiveDataA(short int No, LPTSTR cpSTS, LPTSTR cpDATA)
{
int Rtncd;
int nLen;
BSTR bstrSTS;
BSTR bstrDATA;

// バッファ確保
nLen = MultiByteToWideChar(CP_ACP, 0, cpSTS, strlen(cpSTS), NULL, 0);
bstrSTS = SysAllocStringLen(NULL, nLen);
nLen = MultiByteToWideChar(CP_ACP, 0, cpDATA, strlen(cpDATA), NULL, 0);
bstrDATA = SysAllocStringLen(NULL, nLen);

Rtncd = ReceiveData(No, &bstrSTS, &bstrDATA);

_snprintf(cpSTS, 2, \"%s\", bstrSTS);     <---仕様が2バイトなので合わしました
_snprintf(cpDATA,1024, \"%s\", bstrDATA); <---こちらは可変長です

//メモリの開放
SysFreeString(bstrSTS);
SysFreeString(bstrDATA);

return Rtncd;
}
以上のようなやり方で対応できました。1週間に渡りいろいろと教えていただいて有難うございました。
また、何かありましたらよろしくお願いします。

付加情報:

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.