使用DirectShow的BaseClasses遇到的问题

在学习DirectShow时,难免会跑跑DirectShow中的samples,有时在“Windows开发者中心”查看DirectShow提供的一些类和方法时,也会跑跑相应的实例程序。在跑DirectShow的程序的时候,容易遇到引用文件冲突以及库缺失的问题,比如我在运行DirectShow中的CAMThread类的实例时就遇到了这些问题(http://msdn.microsoft.com/en-us/library/windows/desktop/dd318285(v=vs.85).aspx)。

// multiThreadTest.cpp : 定义控制台应用程序的入口点。

//#include "stdafx.h"
#include 
    
    
     
     
#include "Streams.h"

#pragma comment( lib,"strmbasd.lib")
#pragma comment( lib,"winMM.lib")


class MyThread : public CAMThread
{
protected:
	DWORD ThreadProc(void);
};


DWORD MyThread::ThreadProc()
{
	BOOL bShutDown = FALSE;
	while (!bShutDown)
	{
		DWORD req = GetRequest();
		printf("Request: %d\n", req);
		bShutDown = (req == 0);
		Reply(bShutDown ? S_FALSE : S_OK);
	}
	printf("Quitting Thread\n");
	return 1;
}

void main()
{
	MyThread thread;
	DWORD reply;

	thread.Create();
	reply = thread.CallWorker(3);
	reply = thread.CallWorker(0); // Thread exits.
}

    
    

在这个代码中,需要注意的问题有:

1.不能使用预编译头文件,这主要是因为DirectShow的BaseClasses是一个相当具体的类,其对头文件的包含顺序有较高的要求,当你的程序中使用了ATL、WTL、MFC,甚至stdafx.h时,都会影响BaseClasses所要求的头文件引用顺序,导致编译出错。程序中若使用了stdafx.h,会导致WinNT.h中的439-441行被跳过编译,导致未定义PTCHAR类型,出现如下错误。

directshow\baseclasses\wxdebug.h(296): error C2146: 语法错误: 缺少“;”(在标识符“m_pString”的前面)

directshow\baseclasses\wxdebug.h(293): error C2065: “m_pString”: 未声明的标识符

directshow\baseclasses\wxdebug.h(317): error C2065: “m_pString”: 未声明的标识符


2.需要添加库文件strmbasd.lib和winMM.lib

   strmbasd.lib是DirectShow自带的,存放在C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow \baseclasses\Debug中,当然这个并不是一开始就有,而是要靠你编译一下工程C:\Program Files\Microsoft SDKs\ Windows\v7.1\Samples\ multimedia\directshow\baseclasses\baseclasses.sln才有的。


winMM.lib是Windows SDKs自带的,存放在C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib中,如果出现如下错误就表示你缺少这个库

strmbasd.lib(wxutil.obj) : error LNK2019: 无法解析的外部符号 __imp__timeGetTime@0,该符号在函数 "public: int __thiscall CAMMsgEvent::WaitMsg(unsigned long)" (?WaitMsg@CAMMsgEvent@@QAEHK@Z) 中被引用
1>strmbasd.lib(wxdebug.obj) : error LNK2001: 无法解析的外部符号 __imp__timeGetTime@0
1>strmbasd.lib(wxutil.obj) : error LNK2019: 无法解析的外部符号 __imp__timeSetEvent@20,该符号在函数 "unsigned int __cdecl CompatibleTimeSetEvent(unsigned int,unsigned int,void (__stdcall*)(unsigned int,unsigned int,unsigned long,unsigned long,unsigned long),unsigned long,unsigned int)" (?CompatibleTimeSetEvent@@YAIIIP6GXIIKKK@ZKI@Z) 中被引用


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值