Visual C++ の .NET 2003で開発しております。
マネージとアンマネージについて質問です。
マネージアプリケーションとは、「.NET Framework」のクラスライブラリ郡群のみで構成されたプログラム、という解釈で合ってますでしょうか?
(Visual C++ .NETプログラミングテクニック 田中正造著より)
「Windows フォーム アプリケーション(.NET)」で作成したプロジェクトで、「System.String」のクラスを使用したところ、「System.String」はアンマネージです…といったエラーが頻発してしまい、この解釈が間違っているのかと思い、質問させて頂きたく思います。
「__gc」キーワード付きでclass宣言したところ、エラーは出なくなりました。
アンマネージと__gcの関係などもあるのでしょうか?
ヘルプを探ってみても見付かりませんでした…。
もし、詳しい方いらっしゃいましたら、お知恵をお貸しください。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
>極端なことを言えば System::StringクラスをC++の(アンマネージド)クラス
> として定義してもVCはエラーだとは認識しないと言うことです
この部分は
class System
{
public:
System() { };
class String {
public:
String(){};
};
};
といった 独自のアンマネージクラスを定義してもエラーにならない
と言いたかったわけです
C++の文法的は正しいわけです … しかし .NET FreameWorkの System::Stringと重複するのでソースの可読性は大変悪くなりますけどね
再度ご回答いただき、ありがとうございました!
多重定義・・・みたいなことができるということですね。
どうもまだ知識不足なので、C++のクラスについて勉強しなおしてきます。
No.1
- 回答日時:
C++キーワード classとマネージ型のクラスを区別するために __gcが導入されたのだと思います
VC++.NETは マネージコード、アンマネージコードの混在オブジェクトの作成が可能なのでどれがマネージ環境なのかを区別する必要があります
極端なことを言えば System::StringクラスをC++の(アンマネージド)クラスとして定義してもVCはエラーだとは認識しないと言うことです
ご回答ありがとうございます!
明示的に__gc宣言しないと.NETの文法的によくない、ということですね。
>極端なことを言えば System::StringクラスをC++の(アンマネージド)クラスとして定義してもVCはエラーだとは認識しないと言うことです
すみません、ここが分かりませんでした。
アンマネージで定義すると、マネージとアンマネージのチェック機能が働かなくなるから、System::Stringをgcrootキャストなくても動くようになった・・・という解釈であってますでしょうか?
System::Stringは.NETのクラスですよね?
エラーを見た限り、System::Stringがアンマネージのような書き方がされていて、不思議に思った次第です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) フレームワーク「4.8.1」で、[Sub Main]が動かない。助けて下さい 3 2022/11/14 15:40
- ソフトウェア VisualStudio のデータブレークポイントを有効にする方法 1 2023/05/01 09:42
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- その他(コンピューター・テクノロジー) .NET Frameworkがコントロールパネル>プログラムと機能に表示されない。 3 2022/12/31 15:33
- Windows 10 Visual StudioとVisual C++ Build Toolsについて 1 2023/04/16 03:42
- C言語・C++・C# 「using Windows」でエラーが出る 3 2022/12/23 19:53
- ノートパソコン Win10 EXCEL でのエラー 2 2022/04/03 15:57
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- Microsoft ASP ASP.NETや.NET、C#とかVBとか 2 2022/05/16 21:16
- Windows 10 このWindowsUpdateの失敗メッセージは何を物語るか? 5 2023/07/17 11:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダイアログ表示時にチェックボ...
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールでEnter...
-
継承したクラスを、継承元のク...
-
C++ protectedにアクセス不可
-
関数の呼び出し元の検索
-
ボタンのオーナードローについて
-
【ASP.NET】 独自で作成したク...
-
DebugクラスとTraceクラスの違い
-
VBのシステムの設計書にUMLは適...
-
継承を重ねた場合のコストはど...
-
C++で継承元のクラスの代入演算...
-
C#で通常のbuttonコントロール...
-
MessageBoxを継承したい
-
OnInitDialog()の関数の組み込み方
-
C++/CLIからC++の呼び出しで例外
-
【C++】相互参照
-
エディットコントロールのイベ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
エディットコントロールのイベ...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
ダイアログクラスのコントロー...
-
C++ protectedにアクセス不可
-
DebugクラスとTraceクラスの違い
-
DataGridViewのセルに斜線を引...
-
【ASP.NET】 独自で作成したク...
-
このコンパイルエラーの意味に...
-
エディットコントロールでEnter...
-
継承を重ねた場合のコストはど...
-
C#で通常のbuttonコントロール...
-
ボタンのオーナードローについて
-
MFCのCListCtrlでスクロールを検出
-
【C++】相互参照
-
SetTimerの行でアサートエラー...
おすすめ情報