用DirectShow写了一个程序,tools\option\dictories如下:
include:
D:\开发工具\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\SAMPLES\C++\DIRECTSHOW\BASECLASSES
D:\开发工具\Microsoft DirectX 9.0 SDK (Summer 2004)\Include
D:\开发工具\VC98\INCLUDE
……
library:
D:\开发工具\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\LIB\X64
D:\开发工具\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\LIB\
D:\开发工具\VC98\INCLUDE
……
我的机器的directx是9.0c,但是在编译的时候,老是出现如下错误:
这个问题怎么解决啊?D:\开发工具\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\strmif.h(1018) : error C2146: syntax error : missing ';' before identifier 'HSEMAPHORE'
D:\开发工具\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\strmif.h(1018) : fatal error C1004: unexpected end of file found
CalibFilterprop.cpp
D:\开发工具\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\strmif.h(1018) : error C2146: syntax error : missing ';' before identifier 'HSEMAPHORE'
D:\开发工具\Microsoft DirectX 9.0 SDK (Summer 2004)\Include\strmif.h(1018) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

解决方案 »

  1.   

    你可以先把:strmif.h(1018)的第1018行注释掉,接着再看看。
      

  2.   

    strmif是directX sdk提供的文件,不是我自己编写的。我把出错一行前后的代码贴出来:typedef 
    enum _PinDirection
        { PINDIR_INPUT = 0,
    PINDIR_OUTPUT = PINDIR_INPUT + 1
        }  PIN_DIRECTION;#define MAX_PIN_NAME     128
    #define MAX_FILTER_NAME  128
    typedef LONGLONG REFERENCE_TIME;typedef double REFTIME;typedef DWORD_PTR HSEMAPHORE;@@错误在这typedef DWORD_PTR HEVENT;typedef struct _AllocatorProperties
        {
        long cBuffers;
        long cbBuffer;
        long cbAlign;
        long cbPrefix;
        }  ALLOCATOR_PROPERTIES;
      

  3.   

    这是MSDN里举的一个error C2146的例子:
    void main(void)
    {
       intt x; //Syntax error: missing semicolon before 'x' // 语法错误
    }fatal error C1004: unexpected end of file found
    这个可能是大括号引起的,其他的看
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vcce4/html/everrFatalErrorConezerzerfou.asp
      

  4.   

    我觉得可能不是strmif的问题,因为无论我在这个文件中做什么修改,错误总是在那一行,无论这一行有没有代码都是