疑問解決(C++/CLI)

2012/5/22

C++からちょっと浮気。C++も余り判ってませんが、、、

・概要

 VisualStudio2002からC++で.Netアプリケーションを作成できるようになりました。
 それがC++のマネージ拡張で、マネージドC++と呼ばれます。
 マネージドC++では、コンパイルするとネイティブコードになるのではなく、
 共通中間言語(CIL) になります。

 (追記)
 だいぶ慣れてきました。
 C++の良いところと、
 MFCではくそ面倒くさかったフォーム系を簡単に作成できるようになっていますので、
 VC++に比べてかなりよくなっています。
 画面がC++Builderの様にサクサク作成できます。
 それでいて、XMLシリアライザやDictionary等.Netの機能も使えるので結構いい感じ。

・切替

 マネージドC++とアンマネージドC++を切り替えるのは、#pragma を使います。

 

切替 コード
#pragma managed 以降はマネージドC++を表します。
#pragma unmanaged 以降はアンマネージドC++を表します。

・C++との違い

 C++との違いを纏めます。
差異 C++ C++/CLI
ポインタ
ハンドル
* (アンマネージド) * (アンマネージド)
^ (マネージド)
foreach
Using
デフォルト文字コード マルチバイト ワイドバイト(Unicode)
メモリ確保 new (アンマネージド) gcnew (マネージド)

・注意点

 C++/CLIを利用する時のその他注意点を纏めました。
注意点 解説
アンマネージコードのメソッド呼び出し そのまま可能
アンマネージコードクラスのメンバ変数 ポインタとしての実装が必要
UIの実装 C++ではヘッダファイルは宣言が主な仕事ですが、
C++/CLIでは実装もヘッダファイルで行う様になっています。
何故かはわかりません、、、
バージョン情報 VBの様にプロジェクトのプロパティで設定するのではなく、
リソースファイルとして追加して設定します。
配列 arrayを利用します。
 例 : array<String^>^

・テクニック


注意点 解説
String^ から char* への変換 以下の2メソッドを利用します。
 ・System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi
 ・System::Runtime::InteropServices::Marshal::FreeHGlobal
16進文字列の数値化 TryParseが使えます。
ただし、DWORD::TryParseを使う場合、
何故か受ける変数の型はUInt32でないとエラーになります。
また、strtol系を使う手もあります。

・単語集

名称 解説
   
さらに情報が欲しい方は、Google検索で  
Google
・TOPへ戻る

メールはこちらに