
C#を勉強し始め、アンマネージド(ネイティブ・コード)のコードを書く必要があり
C++での記述を調べています。
マネージ・コードとネイティブ・コードの混在ということは
「#pragma managed」「#pragma unmanaged」で使い分ける事は理解できたのですが
MSDNにある
#pragma managed([push,] on | off)
#pragma managed(pop)
の意味がよくわかりませんでした。
http://msdn.microsoft.com/ja-jp/library/0adb9zxe …
こちらに関して説明が乗っているHP、もしくはその説明を教えていただけないでしょうか。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
#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>
//
//ここのコードを「マネージがオフ」のつもりで書いても、マネージはオンになっている
//
どうです?「元に戻す」ってのが、如何に重要な事か、理解できましたか?
理解できました!
大変丁寧に教えていただきありがとうございます!!
今の状態を意識しつつ、pushとpopをうまく使ってみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
access2021 VBA メソッドまたは...
-
1日に1人がこなせるプログラム...
-
文字コード変換(Unicode To KS...
-
Excel VBA素人です。VBAで図形...
-
VBAでファイルオープン後にコー...
-
Accessの文字列部分一致を合計...
-
エクセルに見えない文字(JISX0...
-
Excelシート上で右クリックがで...
-
エクセル VBA 同じ内容のセル...
-
AccessでReplace関数を使うときに…
-
ActiveReportの改ページ不具合...
-
System.Timers.Timer について
-
Nullの使い方が不正です。
-
WSH動作しない!!(WScript.Sle...
-
オートフィルタで抽出結果に 罫...
-
JavaScriptの定数名が取り消し...
-
COBOLの文法
-
sinカーブの表示のさせ方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2021 VBA メソッドまたは...
-
1日に1人がこなせるプログラム...
-
JANコードとPOSコードは同じ?
-
1、Rstudioで回帰直線を求める...
-
access2003 クエリSQL文に...
-
Exel VBA 別ブックから該当デ...
-
JavaScriptの定数名が取り消し...
-
COBOLの文法
-
VBAでファイルオープン後にコー...
-
変数名「cur」について
-
エクセルに見えない文字(JISX0...
-
オートフィルタで抽出結果に 罫...
-
Nullの使い方が不正です。
-
PreviewKeyDownイベントが2回...
-
【VB6】実行ファイルとした後、...
-
Javaの改行について
-
C# コードビハインドについて
-
Excelシート上で右クリックがで...
-
木偏に「久」
おすすめ情報