OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

atlbase.h と afxwin.hの同時定義

  • すぐに回答を!
  • 質問No.222161
  • 閲覧数2339
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 73% (179/243)

こんにちは、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を改造して回避出来そうですが、それは今後別のものを作る時の支障になりそうなので避けたいです。
 その他の方法で回避する事は出来ないでしょうか?

 宜しくお願いします(..
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル14

ベストアンサー率 37% (1123/2963)

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

(先頭)
#ifndef _windows_h_include
#define _windows_h_include

(最後)
#endif /* _windows_h_include */

これで二重includeは回避できます。(_windows_h_include の部分は一例です。分かりやすいラベルにしてください。)
お礼コメント
honiyon

お礼率 73% (179/243)

こんにちは、honiyonです。

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

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

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

 ありがとうございました(..
投稿日時 - 2002-02-21 15:52:34
-PR-
-PR-
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ