○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++