< MFC の WinInet クラスで HTTP を実装してみる | SHBrowseForFolder クラス >

March 26, 2004

ATL COM AppWizard プロジェクトで MFC を使う

ATL COM AppWizard で作成したプロジェクトでMFCを使いたいことがある。しかし、適当な位置にMFCの宣言を入れたとしても、プリプロセス時にエラーになってしまう。

c:\program files\microsoft visual studio\vc98\mfc\include\afxv_w32.h(14) : fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>

これを実現する方法が、173974 - HOWTO: Add MFC Support to an ATL Project にある。具体的には afxwin.h、afxext.h、afxdisp.h を、atlbase.hより先にインクルードしてやる。

// stdafx.h : 標準のシステム インクルード ファイル、
//            または参照回数が多く、かつあまり変更されない
//            プロジェクト専用のインクルード ファイルを記述します。
.
.
#define _ATL_APARTMENT_THREADED

// ↓atlbase.h をインクルードしている部分を探して
// ↓その直前で下の3つをインクルードする
#include <afxwin.h>   // MFC core and standard components
#include <afxext.h>   // MFC extensions
#include <afxdisp.h>  // MFC Automation extensions
// ↓atlbase.h のインクルード位置
#include <atlbase.h>
// CComModule クラスから派生したクラスを使用して、オーバーライドする場合
// _Module の名前は変更しないでください。
.
.

その他の、たとえば afxmt.h なんかはどこでインクルードしてもかまわない。それから、CWinApp クラスのオブジェクトが必要になる。サービスの場合などは、Win32 Console Application で、「MFCをサポートするアプリケーション」を選択した時のコードを流用すればいい(と思う)。この辺のことは、AfxWinInit をVC++のヘルプで引くと書いてある。あとは、プロジェクトの設定で、MFCを使用しない、になっていないことを確認すればOKである。

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/285

コメント

数時間悩み続けた問題が、この記事を見てすぐ解決しました!
Googleからエラーメッセージで流れてきただけですが、
本当に感謝しています。ありがとうございました!

Debris on the Ground さん、いらっしゃいませ。
お役に立てたようで、よかったです。

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?