首先我安装的是Microsoft DirectX 9.0 SDK (Summer 2004),并且还得安装。net版本才能编译并进行第一步配置。

下面是配置过程:

1,使用VC向导生成一个具体项目,如Win32 Dynamic-Link;

2,包含头文件streams.h;

3,在VC的菜单中选择Project|Settings|C/C++,在弹出的对话框中的Category中选择Code generation,然后在Calling convention中选择_stdcall;

4,使用多线程语言运行时库,即在VC的菜单中选择Project|Settings|C/C++,在弹出的对话框中的Category中选择Code generation,然后在Use run-time library中,Debug版选择Debug Multithreaded,Release版选择Multithreaded。

5,配置必要的链接库文件,即在VC的菜单中选择Project|Settings|Link,在弹出的对话框中的Category中选择General,然后在Object/library modules中输入如下代码:

     Debug版本    strmbasd.lib, msvcrtd.lib, winmm.lib

     Release版本 strmbase.lib, msvcrt.lib, winmm.lib

并且选中Ignore all default libraries。

DirectShow SDK建议,DirectShow应用程序应该至少连接库文件strmiids.lib和quartz.lib。前者定义了DirectShow标准的CLSID和IID,后者定义了导出函数AMGetErrorText(如果应用程序中没有使用到这个函数,也可以不连接这个库)。如果程序里包含了头文件streams.h,则一般库文件还要连接strmbasd.lib、uuid.lib、winmm.lib。

6,将DirectX SDK的Include和Lib目录配置到VC的系统目录中去,并且放在标准的VC目录之前,以保证编译器能够拿到最新版本的源文件。选择Tools|Options|Directories,在弹出的对话框中的Show directories for中选择Include files,配置如下(假设DirectX SDK安装在D:\DXSDK目录下,VC安装在C:\Program Files下):

     D:\DXSDK\Include

     D:\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES

     D:\DXSDK\SAMPLES\C++\COMMON\INCLUDE

     C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE

     C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE

     C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE

再在Show directories for中选择Library files,配置如下:

     D:\DXSDK\Lib

     D:\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES\DEBUG                   /////在第一步编译生成的,呵呵

     D:\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES\RELEASE

     C:\PROGRAM FILES\MICROSOFT SDK\LIB

     C:\Program Files\Microsoft Visual Studio\VC98\LIB

     C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB

7,因为DirectShow应用程序是一种COM客户程序,因此在调用任何COM函数之前调用CoInitialize()(或CoInitializeEx)函数进行COM库的初始化(一般是在应用程序启动的时候调用一次),在结束COM库使用时调用CoUninitialize()函数进行反初始化(一般是在应用程序退出前调用一次)。

----------------------------

配置时的问题【一定要注意】

1。include和lib的路径前后顺序一定要“非常严格按照上面顺序排列”,否则

   1.1 DXSDK\Include和VC98\INCLUDE有头文件名是重名的,例如control.h,strmif.h。所以要优先选择DXSDK的文件声明。

   2.1 DXSDK\Lib和VC98\LIB对 DWORD_PTR 这个数据类型的声明顺序出现编译上连接的歧异!!!!

2。BASECLASSES\DEBUG和BASECLASSES\RELEASE目录和目录里面是内容是没有的,如果你在应用程序中使用了BASECLASSES里面的class,function,filter,interface,就要先用VC编译baseclasses.dsw,编译时请分别选定DEBUG和RELEASE,因为baseclasses.dsw有4个版本,而且默认下都不是DEBUG和RELEASE。编译后生成两个重要文件:strmbasd.lib(Debug),STRMBASE.lib(Release),在以后将用到。

注意:

1) 错误“Please use the /MD switch for _AFXDLL builds”如何解决?

//Settings的C/C++选项卡的Code   Generation的Use   Run-time   liberary改成Debug   Multithreaded   DLL,在Release版本中改成Multithreaded   DLL

2) strmif.h(1018) : error C2146: syntax error : missing ';' before identifier 'HSEMAPHORE'

  此问题比较常见,此问题是Include配置的时候的顺序问题,如果把Windows SDK的顺序配置到了前边那么这个问题就会存在,如果顺序严格按照上边的配置顺序来,此问题就有可能没有了,这个问题会导致编译通不过,是一个很常见的问题。

 

3)另编译时出现了DWORD_PTR或者其他什么类型未定义之类的错误,是因为微软把BASETSD.H从DirectX SDK发行包里拿掉了,这个文件在Platform. SDK里有,在VC的Include路径中把Platform. SDK的include路径提到最前面就可以了。Platform. SDK,最后一个支持VC6的Platform. SDK是February 2003 Edition。

 

 

我的工程放到2003中好使。但是放6.0中出现如下问题 error C2146: syntax error : missing ';' before identifier 'HSEMAPHORE'

我吧D:\DXSDK\SAMPLES\C++\COMMON\INCLUDE 这个的路径给改了本来不存在这个文件夹。新建了一个。

可以参考这个:http://blog.sina.com.cn/s/blog_5147b5d60100dtc4.html

posted on 2010-05-23 11:24  dan VC 之路  阅读(5217)  评论(6编辑  收藏  举报