C++/CLI の基礎

いろいろメモ。デリゲート調べてたら分からなくなった。

C++/CLI とは

CLI 向けに C++ を拡張したプログラム言語

CLI :Common Language Infrastructure
共通言語基盤。

CLR :Common Language Runtime
共通言語ランタイム。
CLI 仕様の .Net Framework アプリケーションを実行する為の仮想マシン

概要
  • CLI 向けに C++ を拡張したプログラム言語。
  • アンマネージド(ネイティブ)のコードは従来の C++ の構文で記述し、
    マネージドのコード ref^% などのキーワードを使用し記述。

 

クラス宣言

ガーベッジコレクションが働くマネージドヒープ上にクラスを作成する場合、
ref キーワードを使用。

    ref class MyClass
    {
    }

 

 

ラッキング ハンドル

マネージドヒープ上インスタンスを作成する場合、gcnew キーワードを使用。

 gcnew で生成されたインスタンスへのポインタを取得する場合、
ガーベッジコレクションによりメモリアドレスが変わるため
C++ のポインタ * は使用出来ずラッキング ハンドル ^ を使用

    MyClass^ myClass = gcnew MyClass;

 

 

ラッキング参照

gcnew で生成されたインスタンスへの参照を取得する場合、
C++ の参照 & は使用できずラッキング参照 % を使用

    MyClass^ a = gcnew MyClass;
    MyClass% s = *a;
    MyClass^% t = a;

 C++ の & が C++/CLI では % に対応?覚えてない...。*p = &T、T = **p でよい?

 

 

nullptr

C++ では、ポインタがなにもさしていない状態を表す際 NULL を使用

しかし NULL は 0 であり、C++/CLI では Int32型 の数値となる。
そのため C++/CLI では別途、
ハンドルがなにもさしていない状態を表すキーワードとして
nullptr が用意された。

    System::String^ s =nullptr

 

  

 

こちらから。
https://www37.atwiki.jp/visualstudio/pages/41.html

 

以上。