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 さん、いらっしゃいませ。
お役に立てたようで、よかったです。