关于DirectX9在VS2005下编译报错的处理资料整理

这篇文章来自

http://blogs.msdn.com/mikewasson/archive/2005/05/23/421116.aspx
 

大家注意下。。。。DX9.0的版本问题。。。B版本的带DSHOW,以后版本被分离了。。。

Some DirectShow Samples Break in Visual Studio 2005

[Note: This post applies to the Platform SDK for Windows Server 2003 SP1 and Server 2003 R2. These issues were fixed in the Windows SDK for Vista.]  

Some of the DirectShow samples break if you install Visual Studio 2005 Beta 2. Most of the errors that I found fall into three categories:

  • C4430: Missing type specifier. To conform with C++, undeclared types do not default to int. All types must be declared. Fix: Declare the type, or suppress the warning with the "/wd4430" flag.
  • C4996: ' xxxx' was declared deprecated. You may be including an older version of strsafe.h from the DirectX SDK or the Platform SDK. You should include the version installed with Visual Studio. (But it's probably harmless to ignore this warning.) 
  • C2065: 'xxx': undeclared identifier. To conform with C++, the scope of a variable declared inside a "for" loop is restricted to the loop. Fixes: (a) Move the declaration outside the for loop. (b) Redeclare the variable in multiple scopes, if you don't need it to persist outside the loop. (c) Set the /Zc:forScope flag. (You can find this under Project, Properties, Configuration Properties, C/C++, Language, Force Conformance In For Loop Scope. Set to "No".)

Here are the specific fixes that I made. Warning: I have not thoroughly tested these, and I only tried them under the "Windows XP 32-bit Debug" environment in Platform SDK. You should use your own judgment before making any of these fixes.

  • BaseClasses/ctlutil.h (278)  
        (LONG) operator=(LONG);//我也出现了这个问题。。。大家注意下
  • BaseClasses/wxdebug.cpp (564)
        static DWORD g_dwLastRefresh = 0;
  • BaseClasses/winutil.cpp (2092)
       UINT Count;
       for (Count = 0;Count < Result;Count++) {
  •  BaseClasses/outputq.cpp (635)
       long iDone = 0;
       for (iDone = 0;
  • Capture/AmCap/amcap.cpp (691)
        for(int i = 0; i < NUMELMS(gcap.rgpmAudioMenu); i++)
  • Capture/AmCap/amcap (2795)
        for(int i = 0; i < NUMELMS(gcap.rgpmAudioMenu); i++)
  • DMODemo/dsutil.cpp (686)
        DWORD i = 0;
        for( i=0; i<m_dwNumBuffers; i++ )
  • dmoimpl.h (622)   [In the Platform SDK headers]
        for (DWORD dw = 0; dw < NUMBEROFOUTPUTS; dw++) {
  • DMO/GargleDMO/MedParamBase/param.cpp (91)
        for (DWORD dwIndex = 0; dwIndex < cParams; dwIndex++)
  • DMO/GargleDMO/MedParamBase/param.cpp (309)
        CCurveItem *pCurve = NULL;
        for (pCurve = pCurveHead;
  • DMO/GargleDMO/gargle.cpp (145)
        for (DWORD i = 0; i < cOutputStreams && SUCCEEDED(hr); ++i)
  • Filters/Dump/dump.cpp (426)
        for (int Loop = 0;Loop < (DataLength % BYTES_PER_LINE);Loop++)
  • Filters/Gargle/gargle.cpp (212)
        static int m_nInstanceCount; // total instances
  • Filters/RGBFilters/RateSource/ratesource.cpp (382)
        for( int y = 0 ; y < DEFAULT_HEIGHT ; y++ )
  • Filters/RGBFilters/RateSource/ratesource.cpp (387)
        for( int y = 0 ; y < DEFAULT_WIDTH ; y++ )
  • VMR/VMRXclBasic and VMR/Ticker: LNK1181: cannot open input file 'dxguid.lib'. This was an error in the makefile. Change to read:
        DXLIB="$(DXSDK_DIR)/Lib/x86"  (currently says "x32")
  • VMR/VMRXcl and VMR/VMRMulti: C1083: Cannot open include file: 'd3dxmath.h': No such file or directory. This is an old DX header that is no longer included in DX or in Visual Studio. Unfortunately the only fix is to download an older version of the DirectX SDK.
  • VMR9/MultiVMR9/GamePlayer/character.cpp (383)
        DWORD i = 0;
        for (i = 0; i < pMeshContainer->NumInfl; ++i)
  • VMR9/MultiVMR9/DLL/MixerControl.h (28)
        static const DWORD MultiVMR9Mixer_DefaultFVF = D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1;
  • VMR9/VMRAllocator: error LNK2019: unresolved external symbol "wchar_t * __stdcall _com_util::ConvertStringToBSTR(char const *)" (etc).  Add this to the makefile:
        LINK32_LIBS = /
        comsuppw.lib /
        shell32.lib /
以上的问题都非常值得参考。现在网上的关于WINCE下播放器制作的问题中都采用的基本上是EVC的。内核在6.0。VS2005是8.0的核。编译的规范更严格了。大趋势所在。
比如你如果采用Norains的CMedia类去写播放器就会遇到这样的问题,或者我也实验过其它一些高手写的类似Cmeida类的播放器类,例如CDXGraph这些都是在EVC下实现了。如果转了vs2005可以参考下。至于vs2008我不太了解,上上周才拿到了vs2008的试用版。公司电脑烂成一团了。实在不敢试验。等攒够了钱自己换了小电看看会不会出现这些问题。
 

你可能感兴趣的:(关于DirectX9在VS2005下编译报错的处理资料整理)