アプリ版:「スタンプのみでお礼する」機能のリリースについて

長文でお手数をかけますが、どうぞよろしくお願い致します。

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のライブラリを使っているからです。
自分の見解は、全体をマネージアプリケーションとしてビルドしてるせいでエラーが出るのかなぁと思っているんですが、
(マネージ拡張をいいえにするとエラーが出なくなるので)
プロジェクトやソースファイルのプロパティをどういじくってもうまくドキュメントクラスだけをマネージ拡張する事ができず、
また原因がマネージ拡張だとしても、ほかはアンマネージで書いているので、原因がよく分からず対処しようがないです。
マネージコードをあまり書きたくないので、できればドキュメントクラスのみをマネージ拡張する方法があれば、
それを教えて頂きたいです。よろしくお願いいたします。

A 回答 (2件)

#pragma unmanaged


#pragma managed
を利用すれば必要なところだけマネージにできると思いますが。

マネージでエラーが出るのは、_TREEITEMが定義されてないからですね。struct _TREEITEM {};を追加すれば解決すると思います。
もちろん、上のでアンマネージにすればいらないですけど。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/14 14:02

ドキュメントクラスの実体だけをマネージコードで記述して、そのポインタをドキュメントクラスに持たせればよいのではないでしょうか?


マネージクラスへのポインタはgcrootを使えばアンマネージクラスに保持させることができると思います。

class CMyDoc : public CDocument
{
 gcroot<DocBase*> m_pDocBase;
 ...
};
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/14 14:03

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