○BSTRの変換

#include <stdio.h>
#include <windows.h>


int main(char* argv[])
{
	//char を BSTR に変換-----------------------------------------------

	char*buf="いなばabcd";
	LPSTR lstr=buf;

	BSTR bstr;

	//BSTRに必要なバッファサイズを求める
	int bstrlen=(int)MultiByteToWideChar(
		CP_ACP,			// コードページ ANSI コードページ
		0,			// 文字の種類を指定するフラグ
		lstr,			// マップ元文字列のアドレス
		strlen(lstr),		// マップ元文字列のバイト数
		NULL,			// マップ先ワイド文字列を入れるバッファのアドレス
		0			// バッファのサイズ
		);

	//バッファを確保する
	bstr=SysAllocStringLen(NULL,bstrlen);

	//BSTRに複製
	MultiByteToWideChar(
		CP_ACP,
		0,
		lstr,
		strlen(lstr),
		bstr,
		bstrlen
		);


	//BSTR を char に変換----------------------------------------------

	char buf2[64]="";

	WideCharToMultiByte(
		CP_ACP,			// コードページ ANSI コードページ
		0,			// 処理速度とマッピング方法を決定するフラグ
		(OLECHAR*)bstr,		// ワイド文字列のアドレス
		-1,			// ワイド文字列の文字数
		buf2,			// 新しい文字列を受け取るバッファのアドレス
		sizeof(buf2) - 1,		// 新しい文字列を受け取るバッファのサイズ
		NULL,			// マップできない文字の既定値のアドレス
		NULL			// 既定の文字を使ったときにセットするフラグのアドレス
	);

	printf(buf2);
	return 0;
}



▲トップページ > Windows と C++