• ベストアンサー

初歩的な質問なのですが。。。

長文でお手数をかけますが、どうぞよろしくお願い致します。 VC++.NET2003にて、MFCアプリケーションを作成します。 アプリケーションの種類:シングルドキュメント プロジェクト形式:Windowsエクスプローラ 完了を押します。 CLeftViewクラスのOnInitialUpdateクラスに CTreeCtrl* pCtrl = &(this->GetTreeCtrl()); TVINSERTSTRUCT tvInsert; tvInsert.hParent = TVI_ROOT; tvInsert.hInsertAfter = NULL; tvInsert.item.mask = TVIF_TEXT; tvInsert.item.pszText = _T("test"); pCtrl->InsertItem(&tvInsert); このコードを挿入します。 ツールバーのプロジェクト→プロパティを開き、構成プロパティの全般で、マネージ拡張をはいにします。 上記でビルドして実行すると、エラーが出てしまいます。 マネージ拡張しているのは、ドキュメントクラスで.NET Frameworkのライブラリを使っているからです。 自分の見解は、全体をマネージアプリケーションとしてビルドしてるせいでエラーが出るのかなぁと思っているんですが、 (マネージ拡張をいいえにするとエラーが出なくなるので) プロジェクトやソースファイルのプロパティをどういじくってもうまくドキュメントクラスだけをマネージ拡張する事ができず、 また原因がマネージ拡張だとしても、ほかはアンマネージで書いているので、原因がよく分からず対処しようがないです。 マネージコードをあまり書きたくないので、できればドキュメントクラスのみをマネージ拡張する方法があれば、 それを教えて頂きたいです。よろしくお願いいたします。

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

  • ベストアンサー
  • jgk
  • ベストアンサー率75% (104/138)
回答No.1

#pragma unmanaged #pragma managed を利用すれば必要なところだけマネージにできると思いますが。 マネージでエラーが出るのは、_TREEITEMが定義されてないからですね。struct _TREEITEM {};を追加すれば解決すると思います。 もちろん、上のでアンマネージにすればいらないですけど。

exmotions
質問者

お礼

ご回答ありがとうございます。 プラグマは、すでに試していました。 が! プロジェクトを作り直して、同じコードを書き、プラグマを指定すると あっさり動いてしまいました。。 ありがとうございました!!

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

ドキュメントクラスの実体だけをマネージコードで記述して、そのポインタをドキュメントクラスに持たせればよいのではないでしょうか? マネージクラスへのポインタはgcrootを使えばアンマネージクラスに保持させることができると思います。 class CMyDoc : public CDocument {  gcroot<DocBase*> m_pDocBase;  ... };

exmotions
質問者

お礼

ご回答ありがとうございます。 問題は別の方法で解決してしまいましたが、 一つの方法として覚えておこうと思います。 ありがとうございました。

関連するQ&A

  • .NET Frameworkのクラスのみで書いたプログラムをマネージアプリケーションと呼ぶのでしょうか?

    Visual C++ の .NET 2003で開発しております。 マネージとアンマネージについて質問です。 マネージアプリケーションとは、「.NET Framework」のクラスライブラリ郡群のみで構成されたプログラム、という解釈で合ってますでしょうか? (Visual C++ .NETプログラミングテクニック 田中正造著より) 「Windows フォーム アプリケーション(.NET)」で作成したプロジェクトで、「System.String」のクラスを使用したところ、「System.String」はアンマネージです…といったエラーが頻発してしまい、この解釈が間違っているのかと思い、質問させて頂きたく思います。 「__gc」キーワード付きでclass宣言したところ、エラーは出なくなりました。 アンマネージと__gcの関係などもあるのでしょうか? ヘルプを探ってみても見付かりませんでした…。 もし、詳しい方いらっしゃいましたら、お知恵をお貸しください。 よろしくお願いします。

  • __gcクラスから、__nogcクラスの構造体を使おうとするとLNK2020エラーが出ます

    NET 2003 C++ のマネージとアンマネージに関する質問です。 「__gc class」から、「__nogc class」の中に作った、「__nogc struct」構造体を使用しようとすると、「error LNK2020: 未解決のトークン」といったエラーになってしまい、 ビルドができません。 構造体を持つクラスの指定を「__gc class」に指定すると、ビルドが通るようになります。 これはどういった理由なのでしょうか? マネージクラスから、アンマネージクラスの構造体は利用できないのでしょうか? 利用できるように改善する方法がございましたら、お教えいただけますと幸いです。 何卒よろしくお願いします。

  • Eclipse 3.1のエラー

    Eclipse3.1での問題に、「プロジェクト HogeProject のビルド・パス内にサイクルが検出されました。」というエラーが出てプロジェクトがビルドできません。 プロパティの「Java のビルド・パス」には何の問題も指摘されていません。 何のエラーなのか分かりますでしょうか。

    • ベストアンサー
    • Java
  • githubにて拡張子slnがない場合のビルド

    c#初心者です。 githubにあるコードをビルドして動くと感動しています。 しかし拡張子slnが掲載されていないコードもあります。 これはどうすれがビルドできるのでしょうか? コードの内容を読んで参考にし、自分で作ったプロジェクトに組み込むしかないのでしょうか?

  • Visual C# 2008 Express ・・ unsafeコードがうまくいかない

    Visual C# 2008 Expressを使っているのですが・・・ unsafeコードを書こうとするとうまくいきません。 ポインタの使い方でエラーになる等というより、 明らかに動作がおかしいです。 例えば・・・ 「新しいプロジェクト」で 「Windowsフォームアプリケーション」を選んで、 まっさらなウィンドウだけ出すアプリを作り、 (勿論、ポインタ操作なんてどこにもない) プロジェクトのプロパティで、 「ビルド」→「アンセーフコードの許可」をONにして、 リビルドすると・・・ デバッガ上では動作する(ウィンドウがでるだけ)のですが、 デバッグなしで実行をすると、ウィンドウも出ずに、 アプリケーションエラーになってしまいます。 何が問題なのでしょうか??

  • visual studio 2015 exe 生成

    visual studio 2015のC++でWin32アプリケーションを作りました。 デバッグしようとしたところ、ビルドエラーが発生して、 「プログラム 'c:¥users¥documents¥visual studio 2015¥Projecst¥Win32project1¥Win32project1.exe'を開始できません。 指定されたファイルが見つかりません」と表示されます。 ソリューションのビルドは正常に出来ます。 そこでprojectのファイルを開いて見たのですが、確かにexeファイルが生成されていませんでした。 特に設定はいじってないです。 どうすればexeファイルが生成されるのでしょうか?

  • Visual Studio で実行ファイルが作れません

    C言語の勉強のため、VisualStudio2005standard を初めて使い始めましたが、ビルドできたのに実行ファイルができません。 ファイル→新しいプロジェクト→プロジェクトの種類→VCC++→win32→コンソールアプリケーション→プロジェクト名の入力→アプリケーションの設定→完了 このように操作したら、ソースフォルダの下に拡張子 .cpp のC++のひな形ができたので、それにソースを書いて、拡張子を .c に替えて保存し、ビルドしたらエラーはありませんでした。 しかし、オブジェクトファイルまたは実行ファイルは作成されていず、メニューの実行コマンドも無効の表示で、実行できませんでした。 操作の誤り、何らかの設定の必要があればご指摘いただきたいです。 よろしくお願いします。

  • DLLからEXEのクラスを呼び出すとリンクエラーになります。

    私は昔VC++6.0を少し触っただけの初心者に近い状態のレベルです。 作っているプログラムは、1つのソリューションの中にEXE実行するプロジェクトとDLLを作るプロジェクトの2つプロジェクトを含んでいます。 DLL側からEXEのクラスを使用すると、ビルド時にリンクエラーになります。LNK2019でシンボルのエラーなのですが、なぜそうなのか?がわかりません。 ご教授いただけますでしょうか。 <ソリューションの構成> A ソリューション  Aプロジェクト(.exe) AAクラス ERR親クラス ← ERR子クラスの継承 Bプロジェクト(.dll) 静的リンク(.defファイル使用) BAクラス BAクラスの実装 {  try {   throw ERR子クラス } catch(ERR子クラス) { } } やりたいことは、BプロジェクトにあるERR子クラスをBプロジェクトと Cプロジェクトの両方で使用したいです。 ビルド時に上のBAクラスのERR子クラスのところでコンパイルはとおるのですが、リンクエラーになります。エラーコードはLNK2019です。 何が足りないのでしょうか? dllからexeのクラスを呼び出すようなことはできないのでしょうか? このやり方自体に問題があり、他の方法にする方がいいですか? ERR親クラス、ERR子クラスともヘッダー定義があり。 CAクラスのヘッダー定義内でinclude宣言しています。 versionはVC2003++です。 よろしくお願いします。

  • XcodeでApplescript

    今年からプログラムを勉強しようと思い、まずはApplescriptで 何かできないかなと考えテキストを購入しました。 環境はOS10.3.9 , Xcode1.5です。 そこでテキスト通りに新規プロジェクトからAppleScript Applicationを選択 次へ 新規AppleScript Applicationから任意のプロジェクト名(ディレクトリは自動で入力)  完了 新規プロジェクトが作成される。 ビルドと実行ボタンを押すとビルド~アプリケーションを実行して のっぺらぼうのウィンドウを表示すると書いてありますが 実際「ビルドと実行」ボタンを押すとFaild 1となり「プロジェクト名. applescript」のエラーに1が付きアプリケーションを実行してくれません。 (プロジェクト名.applescript」の右端のチェックを外すと実行されます) 何がおかしいのでしょうか。初っぱなからつまずいているので宜しくお願い します。

    • ベストアンサー
    • Mac
  • visualstudio2012のエラーについて

    visual studio 2012 professinal の試用版をダウンロードして使おうとしているのですが、MFCアプリケーションを作れず、困っています。 まず、最初にプロジェクトを作成しようとすると"winres.h"というファイルを開けない、というエラーが表示されます。 「コードの編集」を行うとプロジェクトの作成はできるのですが、試しに一番最初の状態でソリューションをビルドしようとすると次は fatal error C1083: include ファイルを開けません。'winsdkver.h' と表示され、エラーが出てしまいます。 いろいろアップグレードしたりしてみたのですが、うまくいきません。 どうすればよいのでしょうか。