C++/CLIで System.String と std::wstringの相互変換

naohiro19
記事: 256
登録日時: 14年前
住所: 愛知県

C++/CLIで System.String と std::wstringの相互変換

投稿記事 by naohiro19 » 13年前

Shift_Jisでの変換は書きましたが System.String と std::wstringの相互変換はエンコード設定がいりません。
以下にC++/CLIのプログラムを示します。(Visual C++ 2008 Express EditionのCLRプロジェクトで確認されています)

CODE:

#using 

using namespace System;

#include 
#include 
#include 

#pragma unmanaged 

//アンマネージのC関数
const wchar_t* wgreet(const wchar_t* name)
{
	static wchar_t result[128];
	wcscpy_s(result, 128, name);
	wcscat_s(result, 128, L"さん、こんにちは");
	return result;
}

#pragma managed

//std::wstring から System.String^ への変換
String^ ToCLI(std::wstring& input)
{
	return gcnew String(input.c_str() );
}

//System.Sttring から std::wstringへの変換
std::wstring FromCLI(String^ input)
{
	std::wstring result;
	if( input != nullptr && input->Length > 0 )
	{
		// System::String をChar 型 = wchar_t 型の配列にする
		array^ warr = input->ToCharArray();

		// 配列がガベージ・コレクトによって移動しないようピンニング
		pin_ptr pin = &warr[0];
		result.assign(pin, input->Length);
	}
	return result;
}

String^ Greet(String^ name)
{
	std::wstring input = FromCLI(name); //System::String^をstd::wstringへ変換
	std::wstring result = wgreet(input.c_str()); //wgreet呼び出し
	return ToCLI(result); //std::wstringをSystem::String^へ変換
}


int main(array^ args)
{
	Console::WriteLine(L"{0}", Greet(L"プログラマ"));
	Console::ReadKey();
	return 0;
}
画面上に「プログラマさん、こんにちは」と表示されていたら成功です。

CODE:

main 関数が呼ばれました
Greet メソッドが呼ばれました
FromCLI メソッドが呼ばれました
wgreet()が呼ばれました
ToCLI メソッドが呼ばれました
プログラマさん、こんにちは
最後に編集したユーザー naohiro19 on 2012年6月13日(水) 23:53 [ 編集 5 回目 ]

コメントはまだありません。