none
■インクルードファイルにまつわるエラー?(PlatformSDK と DirectX 9.0 SDK (February 2005)) RRS feed

  • 質問

  • かるび(VC初心者)です。

    DirectShowでのUSBカメラの操作を行おうとしています。

    VC++ディレクトリのインクルードファイルに

    ①C:\Program Files\Microsoft DirectX 9.0 SDK (February 2005)\Include

    ②C:\Program Files\Microsoft Platform SDK\Include

    ①②と入れると

    1>c:\program files\microsoft directx 9.0 sdk (february 2005)\include\strsafe.h(5595) : warning C4996: '_vsnprintf': This function or variable may be unsafe. Consider using _vsnprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>        c:\program files\microsoft visual studio 8\vc\include\stdio.h(339) : '_vsnprintf' の宣言を確認してください。

    ①だけにすると

    1>d:\tsuchida_s\visual studio 2005\projects\asas\asas\asas.cpp(1) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory

    ②だけにすると

    1>c:\program files\microsoft platform sdk\include\dshow.h(36) : fatal error C1083: include ファイルを開けません。'ddraw.h': No such file or directory
    ①②とも無しにすると

    1>d:\tsuchida_s\visual studio 2005\projects\asas\asas\asas.cpp(1) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory
    となります。

    ソースは、

    #include <windows.h>
    #include <dshow.h>
    #include <stdio.h>
    #include <conio.h>
    #include <qedit.h>
    #include <math.h>
    #include<cv.h>
    #include<highgui.h>
    #include<iostream>
    main()
    {

    <省略>

    }

    ■どう解決すべきかご指導、願います。

    環境:win2k、

    VC++2005Version 8.0.50727.762  (SP.050727-7600)
    Microsoft .NET FrameworkVersion 2.0.50727

     

    2007年4月24日 8:13

すべての返信

  •  

     かるび さんからの引用

    ①②と入れると

    1>c:\program files\microsoft directx 9.0 sdk (february 2005)\include\strsafe.h(5595) : warning C4996: '_vsnprintf': This function or variable may be unsafe. Consider using _vsnprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>        c:\program files\microsoft visual studio 8\vc\include\stdio.h(339) : '_vsnprintf' の宣言を確認してください。

     

     これは、MSDNのヘルプからの引用ですが、

     

    CRT のセキュリティは大幅に強化されています。多くの CRT 関数にセキュリティが強化されたバージョンができました。セキュリティが強化された新しい関数が存在する場合、セキュリティが弱い古いバージョンは推奨されないバージョンとしてマークされ、新しいバージョンには _s ("secure") のサフィックスが付いています

     

    ということで、_vsnprintf の代わりに _vsnprintf_s を利用した方が良いですよ、というおすすめが表示されているのです。_vsnprintf 自身は削除されていませんから、そのままビルドは通る筈です。

    対処方法も、これもヘルプからですが、

     

    セキュリティが弱い古い関数に対する警告を除去するための方法はいくつかあります。一番簡単な方法は、_CRT_SECURE_NO_DEPRECATE を定義するか、warning プラグマを使用する方法です。どちらの方法でも未推奨警告は無効になりますが、その警告の原因になったセキュリティの問題はもちろんそのまま存在します。未推奨警告は有効にしたままにして、新しい CRT セキュリティ機能を利用することを推奨します

     

    ということになります。

    この場合は、PlatformSDK の header の中で表示されていますから、PlatformSDK を version up してみるというのは如何でしょうか?

    例えば、Microsoft Platform SDK for Windows Server 2003 SP1 では、

    #if (_STRSAFE_USE_SECURE_CRT == 1) && !defined(STRSAFE_LIB_IMPL)
            iRet = _vsnprintf_s(pszDest, cchDest, cchMax, pszFormat, argList);
    #else
            iRet = _vsnprintf(pszDest, cchMax, pszFormat, argList);
    #endif

    のように _vsnprintf_s に対応したコードが存在しています。

     

    # もしかすると、その version の PlatformSDK でも STRSAFE_LIB_IMPL=1 とすると大丈夫なのかもしれませんが、確認できていないです。

     

    2007年4月24日 10:03
  • 解決しました。

    PlatformSDK と DirectX 9.0 SDK関連を使うためのVC++設定を見直しました。

    ありがとうございました

    2007年5月2日 4:29
  • 何をどうやったら解決したのかさっぱり分からないのですが・・・

    2011年7月14日 2:15
  • 何をどうやったら解決したのかさっぱり分からないのですが・・・

    4 年前のスレッドに感想だけ書かれても何も変わりません。
    感想を書いたところで、4 年前の当事者が現れてフォローしてくれる可能性はほとんどないからです。

    ところで、あなたが何にお困りで、どのように解決したいのか、さっぱりわかりません。
    このスレッドにはいくつか案が出されていたと思いますが、あなたはそれぞれ検討されていますか?たどり着ける解決手段は一つではないはずですので、誰かの解決策をそのまま採用するのではなく、自分にあった解決策を選ぶべきです。

    もっとも、このスレッドで続けることは正直微妙です。
    過去のスレッドを掘り返すのではなく、自分で新しい質問スレッドを立てて、このスレッドへのリンクを記載して質問することをおすすめします。
    その際、自分の状況や期待、試したことなど、きちんと説明してください。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年7月14日 13:25
    モデレータ