アプリ版:「スタンプのみでお礼する」機能のリリースについて

かなりの初心者でございます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がインストール出来ないため)。

A 回答 (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 を独自に取り込むようになっているファイルはないですね。
#まあ当然か
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>そうでもなければこのシンボルが定義されることはないように思うのですが
#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をインクルードしなくて済む様に)書き換えた方が早いでしょうか?

お礼日時:2007/08/18 13:55

参考URLで同様の質問をしている方がおられますので、参考にしてみてください。



参考URL:http://www3.realint.com/cgi-bin/tarticles.cgi?po …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

リンク先を拝見しましたが、tchar.hをインクルードするにはstrsafe.hが必要で(これはtchar.hの中にそれっぽい部分がありました)、順番は「tchar.h、strsafe.h」としなければならないという回答ですね。

しかしこの順番でインクルードしてるのですが、同じエラーが出てしまうのです(--;)。

お礼日時:2007/08/16 23:05

「Visual Studio 2005」はUNICODEを使うことがデフォルト設定になっているため、2003やVC6で作ったコードがそのまま通らないことが多いです。



試しに「メニュー」→「プロジェクト」→「<あなたのプロジェクト名>のプロパティ」→「構成プロパティ」→「全般」で「UNICODE文字セットを利用する」から「マルチバイト文字セットを利用する」に切り替えてコンパイルしてみてください。
ヘッダ関係を調査するより、こちらの方が早いと思います。
これで通ると良いのですが・・・。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

>「UNICODE文字セットを利用する」から「マルチバイト文字セットを
>利用する」に切り替えてコンパイルしてみてください
実はDirectxのDXUTを使ったプログラムなのです。DXUTがUnicodeが前提となっているためMBCSに出来ないのです(T_T)。

お礼日時:2007/08/16 23:01

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

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


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