标签:rda mon fun 支持 order pointer any and es2017
一、 安装DirectShow。
下载地址:https://pan.baidu.com/s/1kURma3t
下载地址:https://pan.baidu.com/s/1slfmSMD
? ?
? ?
二、 准备需要的静态链接库。
需要的静态链接库有strmiids.lib、strmbasd.lib、strmbase.lib、quartz.lib、winmm.lib。
其中strmiids.lib、quartz.lib在D:\ DXSDK\Lib文件夹下就有。strmbasd.lib要自己编译。
进入D:\ DXSDK\Samples\C++\DirectShow\BaseClasses文件夹下,双击baseclasses.sln。
按F7开始编译。
修改一些编译错误:
1、 error C2146: 语法错误 : 缺少";"(在标识符"PVOID64"的前面)。
修改:在"typedef void * POINTER_64 PVOID64;"前面加上"#define POINTER_64 __ptr64"。
2、 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int。
修改:把"operator=(LONG);"改成"LONG operator=(LONG);"。
修改:把"static g_dwLastRefresh = 0;"改成"static DWORD g_dwLastRefresh = 0;"。
3、error C2065: "Count": 未声明的标识符。
修改:在"for (UINT Count = 0;Count < Result;Count++) "语句前面加上"UINT Count = 0",再把"for (UINT Count = 0;Count < Result;Count++) "改为"for (Count = 0;Count < Result;Count++) "。
4、 error C2065: "iDone": 未声明的标识符。
修改:在"for (long iDone = 0;iDone < nSamples || (m_nBatched != 0 && m_bSendAnyway);)"语句前面加上"long iDone = 0;",再把"for (long iDone = 0;iDone < nSamples || (m_nBatched != 0 && m_bSendAnyway);)"改为"for (iDone = 0;iDone < nSamples || (m_nBatched != 0 && m_bSendAnyway);)"。
修改完错误再设置"生成"—>"批处理"。把Debug、Debug Unicode、Release、Relese Unicode这4个都勾起来。
单击"重新生成"。
这样strmbasd.lib就编译好了。
? ?
? ?
三、 添加VS2008的头文件目录和静态库目录。
1、 头文件目录。
要添加的目录有:
D:\DXSDK\Include
D:\DXSDK\Samples\C++\DirectShow\BaseClasses
D:\DXSDK\Samples\C++\Common\Include。
2、 静态库目录。
要添加的目录有:
D:\DXSDK\Lib
D:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug
D:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug_Unicode
D:\DXSDK\Samples\C++\DirectShow\BaseClasses\Release
D:\DXSDK\Samples\C++\DirectShow\BaseClasses\Release_Unicode
?
?
#ifdef?FILTER_DLL
/*?List?of?class?IDs?and?creator?functions?for?the?class?factory.?This
???provides?the?link?between?the?OLE?entry?point?in?the?DLL?and?an?object
???being?created.?The?class?factory?will?call?the?static?CreateInstance
???function?when?it?is?asked?to?create?a?CLSID_SystemClock?object?*/
CFactoryTemplate?g_Templates[1]?=?{
????//{&CLSID_SystemClock,?CSystemClock::CreateInstance}
{?L"SystemClock",?&CLSID_SystemClock,?CSystemClock::CreateInstance}
};
int?g_cTemplates?=?sizeof(g_Templates)?/?sizeof(g_Templates[0]);
#endif
找到问题了,表面上看是STRMBASE.lib的问题,而STRMBASE.lib是编译自BaseClasses。上面的代码是关键,截取自BaseClasses项目的sysclock.cpp,FILTER_DLL没有预定义,所以出现问题,添加预定义就好了
VS2008下安装与配置DirectShow SDK 9.0 及 DirectShow AMCap改装的问题
标签:rda mon fun 支持 order pointer any and es2017
原文地址:http://www.cnblogs.com/poissonnotes/p/7459532.html