您的位置:首页 > 其它

编译directshow若干问题的解决

2013-11-27 00:02 309 查看


编译directshow若干问题的解决(原创+转):http://blog.sina.com.cn/s/blog_639a2ad70101kpen.html

(2013-05-22 12:31:54)


转载▼

1.安装好windows sdk,进入directshow目录下面的directshow\baseclasses,打开baseclasses.sln项目文件,编译,Debug目录下生成strmbasd.lib

2.新建vc filter工程,到工程属性->c/c++下添加包含目录,此步骤为添加directx头文件和directshow头文件,添加以下三个目录

Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\common

Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses

Microsoft SDKs\Windows\v7.1\Include

3.到链接器->常规->附加库目录,添加对应的lib文件

Microsoft SDKs\Windows\v7.1\Lib

Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug

4.到 链接器->常规->附加依赖项,指定在上述第3步的目录内,添加哪些lib文件

添加如下两个文件

winmm.lib
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug\strmbasd.lib"

注意上面添加strmbasd.lib必须指定完整路径,否则系统会查找到系统平台下的strmbasd.lib,指定完整路径时必须两端加上双引号

5.源码文件里添加头文件

#include <streams.h>

编译,假如报错的话,见下:

编译directshow问题的解决
use vs2005 compiler directshow baseclasses has something error

1.ctlutil.h

modify as below:

  //operator=(LONG);

COARefTime& operator=(LONG);

2.winutil.cpp

modify as below:

UINT Count;

for (Count = 0;Count < Result;Count++) {

3.outputq.cpp

modify as below:

long iDone;

for (iDone = 0;

4.wxdebug.cpp

modify as below:

//static g_dwLastRefresh = 0;

static DWORD g_dwLastRefresh = 0;

如果編譯程式出現

error LNK2019: 無法解析的外部符號 "int __stdcall lstrcmpWInternal

error LNK2019: 無法解析的外部符號 "int __cdecl wsprintfWInternal

error LNK2019: 無法解析的外部符號 "int __stdcall lstrcmpiWInternal

之類的錯誤

這是baseclasses編譯時有個設定要變更

就是project屬性->組態屬性->C/C++->語言之下的 "將wchar_t當作Built-in型別" 設為false

就可以解決上述link error的問題

如果編譯程式link strmbase.lib or strmbasd.lib出現以下的error

strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol "class CFactoryTemplate * g_Templates" (?g_Templates@@3P***CFactoryTemplate@@A)strmbasd.lib(dllsetup.obj)
: error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)

則重新修改baseclasses project的檔案內容

CFactoryTemplate g_Templates[1] = {

{ L"SystemClock", &CLSID_SystemClock, CSystemClock::CreateInstance} //修改後;

// {&CLSID_SystemClock, CSystemClock::CreateInstance} //原本的;

};

另外在vc Project->Settings...->C/C++的 preprocessor definitions:加入FILTER_DLL

然後重新編譯strmbase.lib and strmbasd.lib即可

ps:红色的解决了问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: