码迷,mamicode.com
首页 > 其他好文 > 详细

VS2008下安装与配置DirectShow SDK 9.0 及 DirectShow AMCap改装的问题

时间:2017-08-31 19:03:08      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:rda   mon   fun   支持   order   pointer   any   and   es2017   

一、 安装DirectShow

我装的是DirectShow SDK 9.0b。安装程序名为DXSDK_Jun10.exe

下载地址:https://pan.baidu.com/s/1kURma3t

下载地址:https://pan.baidu.com/s/1slfmSMD

技术分享

技术分享

技术分享

技术分享

技术分享

? ?

? ?

二、 准备需要的静态链接库。

需要的静态链接库有strmiids.libstrmbasd.libstrmbase.libquartz.libwinmm.lib

其中strmiids.libquartz.libD:\ 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;"

技术分享

3error 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);)"

技术分享

修改完错误再设置"生成"—>"批处理"。把DebugDebug UnicodeReleaseRelese Unicode4个都勾起来。

技术分享

单击"重新生成"

技术分享

这样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

技术分享

?

DirectShow AMCap改装, 无法解析的外部符号 "class CFactoryTemplate * g_Templates"

?

#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.cppFILTER_DLL没有预定义,所以出现问题,添加预定义就好了

VS2008下安装与配置DirectShow SDK 9.0 及 DirectShow AMCap改装的问题

标签:rda   mon   fun   支持   order   pointer   any   and   es2017   

原文地址:http://www.cnblogs.com/poissonnotes/p/7459532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!