#using
using namespace System;
using namespace System::Text;
using namespace System::Runtime::InteropServices;
#include
#include
#include
#include
#pragma unmanaged
const char* greet(const char* name)
{
static char result[128];
strcpy_s(result, 128, name);
strcat_s(result, 128, "さん、こんにちは");
return result;
}
#pragma managed
String^ ToCLI(const std::string& input, System::Text::Encoding^ encoding)
{
return gcnew String(input.data(), 0, input.size(), encoding);
}
// System::Stringからstd::stringへの変換
std::string FromCLI(
String^ input,
System::Text::Encoding^ encoding) {
std::string result;
if ( input != nullptr && input->Length > 0 ) {
array^ barray =
System::Text::Encoding::Convert(
Encoding::Unicode, // 変換元エンコーディング
encoding, // 変換先エンコーディング
Encoding::Unicode->GetBytes(input));
pin_ptr pin = &barray[0];
result.assign(reinterpret_cast(pin), barray->Length);
}
return result;
}
public ref class GreetLib
{
public:
static String^ Greet(String^ name)
{
System::Text::Encoding^ sjis = Text::Encoding::GetEncoding("shift_jis");
std::string input = FromCLI(name, sjis);
std::string res = greet(input.c_str() );
return ToCLI(res, sjis);
}
};
int main(array^ args)
{
String^ name = gcnew String("C言語交流フォーラム ~ mixC++ ~");
Console::WriteLine("{0}", GreetLib::Greet(name));
Console::ReadKey();
return 0;
}
C++/CLIでSystem.String<->std:string
C++/CLIでSystem.String<->std:string
System::String⇔std::string の変換は文字コードを変換する必要があります。
出力結果:
最後に編集したユーザー naohiro19 on 2012年6月12日(火) 09:04 [ 編集 2 回目 ]
コメントはまだありません。