○ATL BSTR→char変換
Visual BasicやC#などからの文字列をchar文字列に変換します。
CComBSTR cbstr;
STDMETHODIMP Cinaba::get_test(BSTR* pVal)
{
// TODO: ここに実装コードを追加してください。
TCHAR buf[128];
//BSTR文字列をcharに変換
WideCharToMultiByte(
CP_ACP, // コードページ ANSI コードページ
0, // 処理速度とマッピング方法を決定するフラグ
(OLECHAR*)cbstr, // ワイド文字列のアドレス
-1, // ワイド文字列の文字数
buf, // 新しい文字列を受け取るバッファのアドレス
sizeof(buf) - 1, // 新しい文字列を受け取るバッファのサイズ
NULL, // マップできない文字の既定値のアドレス
NULL // 既定の文字を使ったときにセットするフラグのアドレス
);
buf[2]='-';//変更してみる
//charをBSTRに変換
CComBSTR cbstrPos(_T(buf));
//戻り値に複製
*pVal=cbstrPos.Copy();
return S_OK;
}
STDMETHODIMP Cinaba::put_test(BSTR newVal)
{
// TODO: ここに実装コードを追加してください。
cbstr=newVal;
return S_OK;
}
▼VisualBasicで上のメソッドを呼び出すと
Dim a As New xxxx.Cinaba
a.test = "test"
MsgBox (a.test)
▼C#で上のメソッドを呼び出すと
xxxx.Cinaba a=new xxxx.CinabaClass();
a.test ="test";
System.Windows.Forms.MessageBox.Show(a.test);
出力結果
te-t
▲トップページ
>
Windows と C++