
かなりの初心者でございますm(__)m。
先日のことですが「Visual Studio .net 2003」から「Visual Studio 2005」へアップグレード(というよりは切り替え)を行いました。
すると2003では問題なくビルド出来たものが2005では「fatal error C1189」が出てしまい困っております。
エラーメッセージ
fatal error C1189: #error : Need to include strsafe.h after tchar.h
確かにtchar.hはインクルードしているので、これを文字通りに解釈して後にstrsafe.hをインクルードしたのですが、メッセージは変わらず(--;)。
どの辺りをチェックしたら良いか教えていただけると助かります。
OSはXP、VisualStudioのSP1はあてていません(エラーでSP1がインストール出来ないため)。
No.3ベストアンサー
- 回答日時:
C1189 はコンパイル指令 #error によるものらしいので
Fatal Error C1189 (C++)
http://msdn2.microsoft.com/en-us/library/y0tzt8e …
#error Need to include strsafe.h after tchar.h
というのを検索してみると、
vc/include/tchar.h に
#ifdef _STRSAFE_H_INCLUDED_
#error Need to include strsafe.h after tchar.h
#endif
というのが見つかりました。
tchar.h, strsafe.hのほかにどんなファイルを includeしているか
わかりませんが、間接的にでもどこかから strsafe.h をすでに
読みこんでしまっているということはありませんか?
そうでもなければこのシンボルが定義されることはないように思うのですが。
ざっと見たところ、vc8/include と vc8/PlatformSDK/include には
strsafe を独自に取り込むようになっているファイルはないですね。
#まあ当然か
回答ありがとうございます。
>そうでもなければこのシンボルが定義されることはないように思うのですが
#ifdefと#ifndefを読み間違えました・・・orz。この大元?はDirectxのサンプルなのですが、最初の方にdxstdafx.hというヘッダファイルをインクルードしてまして、この中に以下の記述がありました(エラー制御?)。
#pragma warning( disable : 4996 ) // disable deprecated warning
#include <strsafe.h>
#pragma warning( default : 4996 )
これは「C4996を無効化してstrsafe.hをインクルードしてC4996を有効にする」ということだと思うのですが、ご指摘頂いたのがこれかなぁと。
しかしtchar.hをdxstdafx.hの前に持ってくると別のエラーが出てしまいまして、どうするか決めかねています。
確認のため、2003が入っている環境で再度ビルドしてみたところ、エラーは出ずにコンパイル出来るので、2005の仕様なのかなぁと思ったりもしているのですが・・・。
コードをさっさと(tchar.hをインクルードしなくて済む様に)書き換えた方が早いでしょうか?
No.2
- 回答日時:
回答ありがとうございます。
リンク先を拝見しましたが、tchar.hをインクルードするにはstrsafe.hが必要で(これはtchar.hの中にそれっぽい部分がありました)、順番は「tchar.h、strsafe.h」としなければならないという回答ですね。
しかしこの順番でインクルードしてるのですが、同じエラーが出てしまうのです(--;)。
No.1
- 回答日時:
「Visual Studio 2005」はUNICODEを使うことがデフォルト設定になっているため、2003やVC6で作ったコードがそのまま通らないことが多いです。
試しに「メニュー」→「プロジェクト」→「<あなたのプロジェクト名>のプロパティ」→「構成プロパティ」→「全般」で「UNICODE文字セットを利用する」から「マルチバイト文字セットを利用する」に切り替えてコンパイルしてみてください。
ヘッダ関係を調査するより、こちらの方が早いと思います。
これで通ると良いのですが・・・。
回答ありがとうございます。
>「UNICODE文字セットを利用する」から「マルチバイト文字セットを
>利用する」に切り替えてコンパイルしてみてください
実はDirectxのDXUTを使ったプログラムなのです。DXUTがUnicodeが前提となっているためMBCSに出来ないのです(T_T)。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
多重定義が起きている?--lnk2005エラー:VC++
C言語・C++・C#
-
-
4
CString から LPCTSTRの型に変換
C言語・C++・C#
-
5
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
6
ファイルやディレクトリの存在確認を行う方法
C言語・C++・C#
-
7
C言語 配列の長さの上限
C言語・C++・C#
-
8
C++コンパイル時に『 C1083: include ファイルを開けません。』を表示
C言語・C++・C#
-
9
charからLPTSTRへの変換方法
C言語・C++・C#
-
10
DWORDとcharの変換
C言語・C++・C#
-
11
エディットボックスのフォントを変えたい
C言語・C++・C#
-
12
CoCreateInstanceでエラーになる。
C言語・C++・C#
-
13
エラー:インクルードファイル 'afx.h' をオープンできない などで困っています
C言語・C++・C#
-
14
構文エラー;"が型の前にありませんとは、どうしたら解決できるのですか。"
C言語・C++・C#
-
15
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
16
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
17
VisualStudio2010 VC++ エラー
C言語・C++・C#
-
18
MFCのCListCtrlでスクロールを検出
C言語・C++・C#
-
19
Visual studio2017で、2回目のビルド時、exeファイルが開けない旨のエラーとなる
C言語・C++・C#
-
20
どんなプログラムを書いても指定されたファイルが見つかりません。と出てきます。どうやったら解決しますか
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
C言語でヘッダファイルにグロー...
-
「fatal error C1189」を回避す...
-
エクセルVBAではRound...
-
VBAを何回も作り直して、容量が...
-
ILSpyで、デコンパイルできない。
-
PRO*C コンパイルエラー
-
クリティカルエラー Expressio...
-
VS2010でLibHaruをビルドした...
-
コンパイル??
-
不要な #include
-
コンパイルエラー
-
drand48()が使えない
-
LoadLibraryについて
-
cygwinでのエラーについて
-
マクロ コンパイルがグレーバック
-
VB6とInputManソフトの関係
-
cmakeは何をするのですか? cma...
-
C++コンパイル時に『 C1083: in...
-
VB6で開発中…標準モジュール間...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
Makefile作成時の拡張子.oとは?
-
「fatal error C1189」を回避す...
-
C言語でヘッダファイルにグロー...
-
ILSpyで、デコンパイルできない。
-
<math.h>があるのにsqrtが・...
-
外部シンボル "_main"は未解決です
-
マクロ コンパイルがグレーバック
-
セミコロンについて
-
コンパイルエラー:ユーザ定義...
-
【VC++6.0(MFC)】警告「LINK : ...
-
1 つ以上の複数回定義されてい...
-
VB6とInputManソフトの関係
-
C言語でmからnまでの合計を求め...
-
ExcelVBAで『ByRef 引数の型が...
-
コンパイルに失敗しました、と...
-
漢字のコメントをはずすとコン...
-
C言語のコンパイルができません
おすすめ情報