CStringにBSTRの代入は正常? – プログラミング – Home

CStringにBSTRの代入は正常?
 
通知
すべてクリア

CStringにBSTRの代入は正常?


ナオーバ
 ナオーバ
(@ナオーバ)
ゲスト
結合: 23年前
投稿: 187
Topic starter  

いつもお世話になります。

以下のようなソースを書きました。
 
 STDMETHODIMP CTestCom::Func(BSTR bstrVS, VARIANT_BOOL *ret)
 {
  AFX_MANAGE_STATE(AfxGetStaticModuleState())
 
  *ret = VARIANT_FALSE;
 
  char strVS[4 + 1];
  memset(strVS, 0x00, sizeof(strVS));
 
  CString szVS = bstrVS; <--- ここ
  strcpy(strVS, szVS);
 
  m_ctrl.CheckFunc(strVS);
 
  return S_OK;
 }

問題なく動いているのですが、<--- ここ の行の
CStringにBSTRの代入の部分が気になります。

いろいろなサイトを見たり既存のソースを見たりすると違う方法がとられています。
なので、もしかすると欠点がある or 致命的な間違いなのかと思い投稿しました。

補足:
 引数のBSTRには常に4桁の文字が入っています。

よろしくお願いします


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

適切なoperator=が定義されていれば問題ないと思う。
# マニュアル/ソースを読めばいい。


返信引用
dot
 dot
(@dot)
ゲスト
結合: 22年前
投稿: 2
 

BSTRは文字列の前に4バイトの文字列長(単位はバイトで終端文字を含まない)を
持っています。なので文字列のなかにバイナリの0を含むことが出来ます。
そのため、呼び出し側が0を埋め込む可能性があるなら
単純にCString型に代入するだけではうまくいかないでしょう。
0が含まれないことが確実ならCString型に代入できます。
しかし、ATLとMFCのバージョンによっては以下のコードはエラーになるそうです。
CString szVS = bstrVS;

詳しくはここを見てください。
http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/vccore/html/vclrfatlcompatibilityissues.asp


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました