こんにちは、honiyonです。

 VC++で、MFCを用いてNT用のサービスプログラムを作成しています。

 ATL COM AppWizardで、サービスアプリケーションを選択したので、atlbase.hが StdAfx.hに宣言されています。
 CString型を使いたいので、該当cppファイルに、afxwin.hをincludeしました。
何故か StdAfx.hより先に afxwin.hをincludeすると、CStringの定義が正しくされないようなので、後にもってきています。

#include "StdAfx.h"
#include <AfxWin.h">

 この状態だと、atlbase.h, AfxWin.h双方で windows.hをincludeしているようで、AfxWin.hが参照する afxv_w32.hで、以下のようなエラーが発生します。

fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>

 この問題を回避するために、atlbase.hやAfxWin.hを改造して回避出来そうですが、それは今後別のものを作る時の支障になりそうなので避けたいです。
 その他の方法で回避する事は出来ないでしょうか?

 宜しくお願いします(..

A 回答 (1件)

「windows.h」を変更して良いなら、「windows.h」の先頭と最後に下記を追加してみてください。



(先頭)
#ifndef _windows_h_include
#define _windows_h_include

(最後)
#endif /* _windows_h_include */

これで二重includeは回避できます。(_windows_h_include の部分は一例です。分かりやすいラベルにしてください。)
    • good
    • 0
この回答へのお礼

こんにちは、honiyonです。

 ご回答ありがとうございます(^^)
 極力、元からある(?)ヘッダ等に変更は加えたくないと思います。

 まだ windows.hは覗いていなかったのですが、その宣言は無かったんですね(^^;
 その変更は加えておいた方が今後とも便利そうです。

 今回は、atlbase.h中の、#include <windows.h>を取り除いたファイルを別途用意し、 #include "atlbase_org.h"; のような感じで StdAfx.hの atlbase.hの宣言を置き換える事で対応してみました。
 現在の所、問題なく動作しています。

 ありがとうございました(..

お礼日時:2002/02/21 15:52

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

このQ&Aを見た人はこんなQ&Aも見ています

今、見られている記事はコレ!

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる

このQ&Aを見た人が検索しているワード


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ