こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

managed(push, off) の意味

C#を勉強し始め、アンマネージド(ネイティブ・コード)のコードを書く必要があり
C++での記述を調べています。

マネージ・コードとネイティブ・コードの混在ということは
「#pragma managed」「#pragma unmanaged」で使い分ける事は理解できたのですが

MSDNにある
#pragma managed([push,] on | off)
#pragma managed(pop)
の意味がよくわかりませんでした。
http://msdn.microsoft.com/ja-jp/library/0adb9zxe.aspx

こちらに関して説明が乗っているHP、もしくはその説明を教えていただけないでしょうか。

よろしくお願いします。

投稿日時 - 2014-05-21 11:11:15

QNo.8604332

困ってます

質問者が選んだベストアンサー

#pragma managed(push, on)

の意味は「今のマネージのオンオフの状態を取っておいて、マネージをオンにする」と言う意味。

#pragma managed(push, off)

の意味は「今のマネージのオンオフの状態を取っておいて、マネージをオフにする」と言う意味。

#pragma managed(pop)

の意味は「pushで取っておいたマネージの状態に戻す」と言う意味。

どこかのコードの途中で「マネージを一時的にオンしたい」とします。

一時的にオンにした後は「元の状態に戻す必要」があります。

そして、その場所の「元の状態がオンかオフか判らない」としたら、どうしたら良いでしょう?

//サンプルコード1
//この位置はオンかオフか判らない
//
//マネージをオンにする
#pragma managed
//
~~~
~~~
//マネージを元に戻す
//#pragma managed/unmanagedのどっちか判らない!元に戻せない。どうしよう?
//

これでは、元に戻せませんね。

//サンプルコード2
//この位置はオンかオフか判らない
//
//今の状態を保存して、マネージをオンにする
#pragma managed(push,on)
//
~~~
~~~
//マネージを元に戻す
#pragma managed(pop)
//

どうです?元の状態がどっちか判らなくても「元の状態」に戻せたでしょう?

managedのpushとpopは、通常「インクルードファイルの中で、マネージをオンしたりオフしたりする必要がある時」に使います。

例えば、test.hppのインクルードファイル内で

//マネージをオンにする
#pragma managed(push,on)
//
~~~
~~~
//マネージを元に戻す
#pragma managed(pop)

と書きます。

test.hppは「どこで使われるか判らない」ですから、マネージがオンの場所で呼び出されたり、マネージがオフの場所で呼び出されたりします。

インクルードを呼び出す側も

//マネージをオンする
#pragma managed
//
//このtest.hppは、中でマネージを一時的にオンにしても元に戻してくれる
<#include test.hpp>
//
//ここは「マネージがオン」のつもりで書く
//
#pragma unmanaged
//
//このtest.hppは、中でマネージを一時的にオンにしても元に戻してくれる
<#include test.hpp>
//
//ここは「マネージがオフ」のつもりで書く
//

みたいになっています。

もし、test.hppの中で「マネージをオンしたまま、元に戻さなかった」としたら、困った事になります。

//
#pragma unmanaged
//
//このtest.hppは、中でマネージをオンにしたまま戻さないという、極悪非道なファイル
<#include test.hpp>
//
//ここのコードを「マネージがオフ」のつもりで書いても、マネージはオンになっている
//

どうです?「元に戻す」ってのが、如何に重要な事か、理解できましたか?

投稿日時 - 2014-05-21 11:44:35

お礼

理解できました!
大変丁寧に教えていただきありがとうございます!!
今の状態を意識しつつ、pushとpopをうまく使ってみたいと思います。

投稿日時 - 2014-05-21 15:45:08

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.1

その下の例では不足ですか?

投稿日時 - 2014-05-21 11:30:00

-広告-
-広告-
-広告-
-広告-