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月16日 13:08 発信者:ryochan
題名:RE(4):外部関数・・・BSTR(UNICODE)変換(2)

C側のサンプル
include \"comdef.h\"を追加して(いると思いますが)

extern \"C\"
__declspec(dllexport) int WINAPI ReceiveDataA(short int No, LPTSTR STS, LPTSTR DATA)

{
  int nLen;

 //*****ASCII -> BSTR(UNICODE)変換********
 nLen = strlen(STS);
 // 必要な長さを求める
 nLen = MultiByteToWideChar(CP_ACP, 0, STS, nLen, NULL, 0);
 // バッファの確保
 BSTR bstrSTS = SysAllocStringLen(NULL, nLen);
 // 変換
 MultiByteToWideChar(CP_ACP, 0, STS, nLen, bstrSTS, nLen);
 //同様にDATAも変換
 nLen = strlen(STS);
 nLen = MultiByteToWideChar(CP_ACP, 0, DATA, nLen, NULL, 0);
 BSTR bstrDATA = SysAllocStringLen(NULL, nLen);
 MultiByteToWideChar(CP_ACP, 0, DATA, nLen, bstrDATA, nLen);

 //BSTR(UNICODE)変換の確認
 MessageBoxW(NULL, bstrSTS ,L\"\", MB_OK);
 MessageBoxW(NULL, bstrDATA ,L\"\", MB_OK);

 //ReceiveData(No, bstrSTS, bstrDATA);
 //ReceiveDataはは試せないので、適当にUNICODEを代入
 bstrSTS = L\"11111111111111\";
 bstrDATA = L\"2222222222222\";

 //取得したデータをASCIIに変換して戻す
 // 変換
 nLen  = WideCharToMultiByte(CP_ACP, 0, bstrSTS, sizeof(bstrSTS) + 1,
     STS, sizeof(bstrSTS) + 1, NULL, NULL);

 nLen = WideCharToMultiByte(CP_ACP, 0, bstrDATA, sizeof(bstrDATA) + 1,
     DATA, sizeof(bstrDATA) + 1, NULL, NULL);

 // 終端のヌル文字を設定。
 *(bstrSTS + sizeof(bstrSTS)) = \'\\0\';
 *(bstrDATA + sizeof(bstrDATA)) = \'\\0\';

 return 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.