ユーザ用ツール

サイト用ツール


cli:pin_ptr

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

cli:pin_ptr [2009/02/03 08:28]
192.168.0.61
cli:pin_ptr [2013/12/23 09:08]
ライン 1: ライン 1:
-{{indexmenu_n>​11}} 
-====== pin_ptr ====== 
  
- 
-pin_ptrはマネージヒープ上のvalue typeや基本型をC++のポインタで扱う機能です。 
- 
-前章のサンプルで、set100(int* p)を変更したくない場合は、pin_ptrを使います。 
- 
-<code cpp> 
-ref class R 
-{ 
-public: 
-    Object o; 
-    int i; 
-}; 
-void set100(int *i) 
-{ 
-    *i = 100; 
-} 
-int main() 
-{ 
-    R^ r = gcnew R; 
-    pin_ptr<​int>​ p = &​r->​i;​ 
-    set100(p); 
-    p = nullptr; ​   // unpin 
-} 
-</​code>​ 
- 
-pin_ptrを使ってpinすると、インスタンスすべて(この場合R)がpinされます。pin_ptrはなるべく早くunpinした方がいいと思います。 
- 
-pin_ptr関係で以下のようなコンパイルエラーが出ることがあります。 
- 
-error C2664: '​set100'​ : cannot convert parameter 1 from '​cli::​interior_ptr<​Type>'​ to 'int *' 
- 
-エラーの出るソースは以下です。 
- 
-<code cpp> 
-ref class R 
-{ 
-public: 
-    Object o; 
-    int i; 
-}; 
-void set100(int *i) 
-{ 
-    *i = 100; 
-} 
-int main() 
-{ 
-    R^ r = gcnew R; 
-    set100(&​r->​i); ​   // ERROR 
-} 
-</​code>​ 
-r はマネージヒープ上に存在するため、ポインタに変換することができないためです。 



/var/www/html/virtual/cppcli/data/pages/cli/pin_ptr.txt · 最終更新: 2013/12/23 09:08 (外部編集)