プロが教える店舗&オフィスのセキュリティ対策術

Visual C++ の .NET 2003で開発しております。

マネージとアンマネージについて質問です。
マネージアプリケーションとは、「.NET Framework」のクラスライブラリ郡群のみで構成されたプログラム、という解釈で合ってますでしょうか?
(Visual C++ .NETプログラミングテクニック 田中正造著より)

「Windows フォーム アプリケーション(.NET)」で作成したプロジェクトで、「System.String」のクラスを使用したところ、「System.String」はアンマネージです…といったエラーが頻発してしまい、この解釈が間違っているのかと思い、質問させて頂きたく思います。

「__gc」キーワード付きでclass宣言したところ、エラーは出なくなりました。
アンマネージと__gcの関係などもあるのでしょうか?

ヘルプを探ってみても見付かりませんでした…。
もし、詳しい方いらっしゃいましたら、お知恵をお貸しください。
よろしくお願いします。

A 回答 (2件)

>極端なことを言えば System::StringクラスをC++の(アンマネージド)クラス


> として定義してもVCはエラーだとは認識しないと言うことです

この部分は
class System
{
  public:
  System() { };
  class String {
    public:
    String(){};
  };
};
といった 独自のアンマネージクラスを定義してもエラーにならない
と言いたかったわけです
C++の文法的は正しいわけです … しかし .NET FreameWorkの System::Stringと重複するのでソースの可読性は大変悪くなりますけどね
    • good
    • 0
この回答へのお礼

再度ご回答いただき、ありがとうございました!
多重定義・・・みたいなことができるということですね。
どうもまだ知識不足なので、C++のクラスについて勉強しなおしてきます。

お礼日時:2007/12/20 13:59

C++キーワード classとマネージ型のクラスを区別するために __gcが導入されたのだと思います



VC++.NETは マネージコード、アンマネージコードの混在オブジェクトの作成が可能なのでどれがマネージ環境なのかを区別する必要があります

極端なことを言えば System::StringクラスをC++の(アンマネージド)クラスとして定義してもVCはエラーだとは認識しないと言うことです
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
明示的に__gc宣言しないと.NETの文法的によくない、ということですね。

>極端なことを言えば System::StringクラスをC++の(アンマネージド)クラスとして定義してもVCはエラーだとは認識しないと言うことです
すみません、ここが分かりませんでした。
アンマネージで定義すると、マネージとアンマネージのチェック機能が働かなくなるから、System::Stringをgcrootキャストなくても動くようになった・・・という解釈であってますでしょうか?
System::Stringは.NETのクラスですよね?
エラーを見た限り、System::Stringがアンマネージのような書き方がされていて、不思議に思った次第です。

お礼日時:2007/12/20 10:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!