VSL 2010のコンパイルの時はwint.h問題に出会います。

28207 ワード

http://hagejid.blog.51cto.com/141754/294797
今日は思いつきで、マイクロソフトでVSL 2010に遊びに行きました。組み立てたら勝手に工事をして、結果をコンパイルする時にいくつかのエラーが出てきます。全部wint.hの中にあります。

  
  
  
  
  1. ------ Rebuild All started: Project: 123, Configuration: Debug Win32 ------  
  2.   stdafx.cpp  
  3. c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(290): error C2146: syntax error : missing ';' before identifier 'PVOID64' 
  4. c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(290): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
  5. c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(8992): error C2146: syntax error : missing ';' before identifier 'Buffer' 
  6. c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(8992): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
  7. c:\program files\microsoft sdks\windows\v7.0a\include\winnt.h(8992): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
  8. ========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ========== 
それからまた大法を捜索して、これらの情報で捜索して、誰を探してこの問題にぶつかります。その結果、マイクロソフトのウェブサイトで情報を見ました。
 

  
  
  
  
  1. I built a new project to start the porting of an application written with CV6++, but the project stopped with the following errore just after few modifications to stdafx.h and the main include icarus2010.h.  
  2.  
  3.  
  4.  
  5. 1>------ Build started: Project: Icarus2010, Configuration: Debug Win32 ------  
  6. 1>Build started 04/11/2009 16.51.46.  
  7. 1>_PrepareForBuild:  
  8. 1> Touching "Debug\Icarus2010.unsuccessfulbuild".  
  9. 1>ClCompile:  
  10. 1> stdafx.cpp  
  11. 1>c:\programmi\microsoft sdks\windows\v7.0a\include\winnt.h(290): error C2146: syntax error : missing ';' before identifier 'PVOID64' 
  12. 1>c:\programmi\microsoft sdks\windows\v7.0a\include\winnt.h(290): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
  13. 1>c:\programmi\microsoft sdks\windows\v7.0a\include\winnt.h(8992): error C2146: syntax error : missing ';' before identifier 'Buffer' 
  14. 1>c:\programmi\microsoft sdks\windows\v7.0a\include\winnt.h(8992): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
  15. 1>c:\programmi\microsoft sdks\windows\v7.0a\include\winnt.h(8992): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
  16. 1>c:\programmi\microsoft sdks\windows\v7.0a\include\exdisp.h(842): error C2061: syntax error : identifier 'SHANDLE_PTR' 
  17. 1>  
  18. 1>Build FAILED.  
  19. 1>  
  20. 1>Time Elapsed 00:00:01.93  
  21. ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========  
  22.  
  23. The modifications in the stdafx were  
  24.  
  25. #pragma warning(disable: 4786)  
  26. #pragma warning (disable:4996)  
  27. #pragma warning (disable:4244)  
  28. #pragma warning (disable:4189)  
  29. #pragma warning (disable:4100)  
  30.  
  31. and the modifications in the main inlcude were some include files from the VC6++ application. For a while the new project worked!   
  32.    ( ) Product Language  
  33. EnglishVersion  
  34. Visual Studio 2010 Beta 2Operating System  
  35. Windows XP  
  36. Operating System Language  
  37.  
  38. ItalianSteps to Reproduce  
  39. unknownActual Results  
  40. unknownExpected Results  
  41. soon      You can indicate your satisfaction with how Microsoft handled this issue by completing this quick 3 question survey. [Details]   
  42.  
  43.    
  44. ///////////////////////////////////////////////////////////////////////  
  45.     
  46.  Microsoft   2009/11/5 1:29     
  47. Thank you for your feedback, We are currently reviewing the issue you have submitted.   
  48.  Microsoft   2009/11/8 20:41     
  49. Thanks for reporting this issue.   
  50.  
  51. In order to fix the issue, we must first reproduce the issue in our labs. We are unable to reproduce the issue with the steps you provided.  
  52.  
  53. Please provide us with a demo zipped project file so that we can conduct further research.  
  54.  
  55. It would be greatly appreciated if you could provide us with that information as quickly as possible. If we do not hear back from you within 7 days, we will close this issue.  
  56.  
  57. Thanks again for your efforts and we look forward to hearing from you.  
  58.  
  59. Visual Studio Product Team  
  60.  
  61.  Microsoft   2009/11/9 11:54     
  62. Hi -   
  63.  
  64. Do you have the DirectX SDK installed on the machine? We have seen some cases where the DirectX SDK installer modifies the Visual Studio include path and puts the DirectX SDK entries first. This causes the build to use DirectX versions of some files that are a different version that the files in the Visual Studio SDK.  
  65.  
  66. Try changing the order of include directories in VS so the DirectX SDK entries are last. That may solve the problem.  
  67.  
  68. Mike Robinson  
  69. Program Manager  
  70. Windows SDK Team  
ある家伙もこの問題にぶつかりました。マイクロソフトの答えは、DIRECTX SDKをインストールしたかもしれません。ディレクトリ設定を含めてDX SDKのディレクトリを後ろに移動すればいいです。
初めて使い慣れないものを使って、「winint.h」というキーワードで探しましたが、VSS 2005にDX SDKを設置したのがネットで見つけました。
 

  
  
  
  
  1. : winnt.h  
  2.  
  3. #define POINTER_64 __ptr64  
  4.  
  5. typedef void *PVOID;  
  6. typedef void * POINTER_64 PVOID64;  
  7.  
  8. winnt.h.  
  9. include ,platform SDK winnt.h  
  10. DDK ,vc6.0  winnt.h 。 dxsdk  winnt.h 。  
  11.  
  12. IDE  ->  ->  vc++ ; include   
  13. dxsdk winnt.h 。  
  14.  
 

  
  
  
  
  1. DirectShow  VS2005  
  2. :  
  3. XP Professional sp2  
  4. visual studio 2005 version 8.0.50727.42  
  5. DirectX 9.0(9.0b) SDK Update - (Summer 2003)   
  6.  
  7.  
  8. , baseclasses, baseclasses? dx sdk , :  
  9. D:\DX90SDK\Samples\C++\DirectShow\  
  10. baseclasses , , 。   
  11.  
  12. 1, baseclasses.sln , , ,  
  13. :  
  14. 1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64' 
  15. 1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
  16. 1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C2146: syntax error : missing ';' before identifier 'Buffer' 
  17. 1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
  18. 1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
  19. 1>d:\DX90SDK\Samples\C++\DirectShow\BaseClasses\ctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int : :operator=(LONG); , VC6 , ,   ; vs2005 , , wd4430 ; c+ +/Command Line /wd4430 。   
  20.  
  21.  
  22. 2, Tools->Options->Projects and solutions->vc++ directories->show directories for include files  
  23.  
  24. D:\DX90SDK\Include  
  25. D:\DX90SDK\Samples\C++\DirectShow\BaseClasses  
  26. D:\DX90SDK\Samples\C++\Common  
  27. , include files , , :  
  28. $(VCInstallDir)include  
  29. $(VCInstallDir)atlmfc\include  
  30. $(VCInstallDir)PlatformSDK\include  
  31. $(FrameworkSDKDir)include  
  32. D:\DX90SDK\Include  
  33. D:\DX90SDK\Samples\C++\DirectShow\BaseClasses  
  34. D:\DX90SDK\Samples\C++\Common  
  35.   project->BaseClasses properties->configuration->C/C++ -> General->Additional Include Directories (.,..\..\..\..\include) , ,PVOID64 , :  
  36. POINTER_64  , 64 , SDK BASETSD.H (Microsoft Visual Studio 8\VC\PlatformSDK\Include\basetsd.h(23):#define POINTER_64 __ptr64), DXSDK basetsd.h, POINTER_64, , include files 。 , winnt.h , :typedef   void   *PVOID;     
  37. typedef   void   *POINTER_64   PVOID64;  
  38. :  
  39. #define   POINTER_64   __ptr64   
  40.  
  41. 3, , :  
  42. BaseClasses\ctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
  43. , :  
  44. project->BaseClasses properties->configuration->C/C++ ->Command Line, /wd4430 。  
  45. 4,  , error C2065: 'Count' : undeclared identifier , ,C++ , for for ,   for for(int i,...), for i , , project->BaseClasses properties->configuration->C/C++->Language->Force Comformance in For Loop Scrope No 。 , , 。   
  46.  
  47. , , , , 4 :  
  48. BaseClasses\Debug\strmbasd.lib  
  49. BaseClasses\Debug_Unicode\strmbasd.lib  
  50. BaseClasses\Release\STRMBASE.lib  
  51. BaseClasses\Release_UnicodeSTRMBASE.lib   
  52.  
  53. lib    
  54.  
  55. commctrl.lib   
  56. coredll.lib   
  57. strmiids.lib   
  58. strmbase.lib   
  59. uuid.lib   
  60. ole32.lib   
  61. commdlg.lib   
  62.  
  63. Tools->Options->Projects and solutions->vc++ directories->show directories for->library files 。  
  64. DX90SDK\Samples\C++\DirectShow\Players\PlayDMO 。   
  65.  
  66.  
  67. 3 blog, :  
  68. DirectShow VS2005 PVOID64    
  69. http://www.cnblogs.com/RunOnTheWay/archive/2008/01/17/1043705.html  
  70. DirectShow  VS2005  
  71. http://blog.cnii.com.cn/?uid-75821-action-viewspace-itemid-24418  
  72. Some DirectShow Samples Break in Visual Studio 2005  
  73. http://blogs.msdn.com/mikewasson/archive/2005/05/23/some-directshow-samples-break-in-visual-studio-2005.aspx