おまけ: CLRフォームアプリケーションのフォーム名変更
Visual Studioで「CLR Windows Forms アプリケーション」を生成すると、トップ・フォームには"Form1"という味もそっけもない名前が付けられます。C#/VB.NETだとクラス名の変更に連動してあちこちの名前が自動的に書き換えられてつじつまを合わせてくれるのですが、C++/CLIではひとつひとつ書き換えなくてはなりません。生成されたフォームのヘッダ「Form1.h」にはご丁寧にもビギナをビビらせる脅し文句が大書されています。
加えて生成されたファイル群にはヘッダ「Form1.h」と対になるはずの「Form1.cpp」が見当たりません。

C/C++の流儀「宣言は.hに、実装は.cppに書くべし」に真っ向から刃向うファイル構成です。ビギナに優しくありませんよね。
僕の解決法は「Form1なんか捨てちまえ!」です。吐かれた雛型が気に入らないなら新たに起こしたほうがよっぽど楽。メニューの[プロジェクト]-[新しい項目の追加]から[UI]-[Windowsフォーム]を選択し、好みのフォーム名(ここでは「MainForm」)を指定します。
するとプロジェクトにはMainForm.hとMainForm.cppが追加されます。追加されたMainFormをアプリケーションのメイン・フォームとするため、mainを修正しましょう。#include "Form1.h"を#include "MainForm.h"に、gcnew Form1()をgcnew MainForm()に変更します。
#include "stdafx.h"
#include "MainForm.h" // ※変更※
using namespace CLR_FormApplication;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// メイン ウィンドウを作成して、実行します
Application::Run(gcnew MainForm()); // ※変更※
return 0;
}
ここでいったんビルド/実行し、MainFormが表示されれば切り替え完了。

お払い箱となったForm1.h、Form1.resxはプロジェクトから削除できます。ついでに中身からっぽのMainForm.cppに下ごしらえをしておきましょう。
#include "StdAfx.h"
#include "MainForm.h"
// ※追加:ここから※
namespace CLR_FormApplication {
// ここにMainFormの実装を書く。
}
// ※追加:ここまで※
まとめ
そんなわけで、C++/CLIでの文字列に絡んだ厄介ごとの対処法(+ちょっとしたおまけ)を紹介しました。managedとnativeとの橋渡し役ですから厄介ごとを引き受けるのがお役目ですからね。
ところで、managedなアプリケーションは実行環境に応じて32bit/64bitを実行時に自動切り替え可能です。が、C++/CLIは(native部分を含んでいるので)どちらかに固定されます。なのでC++/CLIによる仲介アセンブリは32bitあるいは64bit専用となってしまいます。nativeなライブラリが32bit、managedなアプリケーションが64bit動作となると(その逆でも)、C++/CLIは仲介できなくなってしまいます。ライブラリのソースがあり、実行環境に合わせて再ビルドすればなんとかなるでしょうが……。
エレガントな解決策がありましたら、ぜひともご一報くださいませ。


