• ベストアンサー

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

長文でお手数をかけますが、どうぞよろしくお願い致します。 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