当前位置: 代码迷 >> 多媒体/流媒体开发 >> Win Mobile 6.0+vs2005+directshow下pushsource filter的改写,哪位高手能看一下为什么错了?拜托!(分不够再加)
  详细解决方案

Win Mobile 6.0+vs2005+directshow下pushsource filter的改写,哪位高手能看一下为什么错了?拜托!(分不够再加)

热度:10304   发布时间:2013-02-26 00:00:00.0
Win Mobile 6.0+vs2005+directshow下pushsource filter的改写,谁能看一下为什么错了?拜托!(分不够再加)
错误 1 error LNK2019: 无法解析的外部符号 "public: __cdecl CSourceStream::CSourceStream(wchar_t *,long *,class CSource *,wchar_t const *)" (??0CSourceStream@@QAA@PA_WPAJPAVCSource@@PB_W@Z),该符号在函数 "public: __cdecl CPushPinDesktop::CPushPinDesktop(long *,class CSource *)" (??0CPushPinDesktop@@QAA@PAJPAVCSource@@@Z) 中被引用 ZDesktopFilter.obj
错误 2 error LNK2001: 无法解析的外部符号 "protected: virtual long __cdecl CSourceStream::QueryId(wchar_t * *)" (?QueryId@CSourceStream@@MAAJPAPA_W@Z) ZDesktopFilter.obj
错误 3 error LNK2019: 无法解析的外部符号 "void __cdecl DbgLogInfo(unsigned long,unsigned long,wchar_t const *,...)" (?DbgLogInfo@@YAXKKPB_WZZ),该符号在函数 "public: virtual __cdecl CPushPinDesktop::~CPushPinDesktop(void)" (??1CPushPinDesktop@@UAA@XZ) 中被引用 ZDesktopFilter.obj
错误 4 error LNK2001: 无法解析的外部符号 dpCurSettings ZDesktopFilter.obj
错误 5 error LNK2019: 无法解析的外部符号 "public: __cdecl CSource::CSource(wchar_t *,struct IUnknown *,struct _GUID)" (??0CSource@@QAA@PA_WPAUIUnknown@@U_GUID@@@Z),该符号在函数 "private: __cdecl CPushSourceDesktop::CPushSourceDesktop(struct IUnknown *,long *)" (??0CPushSourceDesktop@@AAA@PAUIUnknown@@PAJ@Z) 中被引用 ZDesktopFilter.obj
错误 6 error LNK2001: 无法解析的外部符号 "public: virtual unsigned long __cdecl CBaseFilter::NonDelegatingRelease(void)" (?NonDelegatingRelease@CBaseFilter@@UAAKXZ) ZDesktopFilter.obj
错误 7 error LNK2001: 无法解析的外部符号 "public: virtual long __cdecl CSource::FindPin(wchar_t const *,struct IPin * *)" (?FindPin@CSource@@UAAJPB_WPAPAUIPin@@@Z) ZDesktopFilter.obj
错误 8 error LNK2001: 无法解析的外部符号 "public: virtual long __cdecl CBaseFilter::JoinFilterGraph(struct IFilterGraph *,wchar_t const *)" (?JoinFilterGraph@CBaseFilter@@UAAJPAUIFilterGraph@@PB_W@Z) ZDesktopFilter.obj
错误 9 error LNK2001: 无法解析的外部符号 "public: virtual long __cdecl CBaseFilter::QueryVendorInfo(wchar_t * *)" (?QueryVendorInfo@CBaseFilter@@UAAJPAPA_W@Z) ZDesktopFilter.obj
错误 10 fatal error LNK1120: 9 个无法解析的外部命令 Windows Mobile 6 Professional SDK


------解决方案--------------------------------------------------------
编译baseclass,生成lib,设置好lib库
------解决方案--------------------------------------------------------
vc2005配置DirectShow整理如下


首先,就是编译baseclasses,什么是baseclasses?打开你的dx的sdk安装目录,例如:
D:\DX90SDK\Samples\C++\DirectShow\
这里就有一个叫baseclasses的工程,为安全起见,请先备份此工程。

1,双击baseclasses.sln打开,提示我们需要转换工程,按提示转换就是了,编译
提示错误:
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64'
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C2146: syntax error : missing ';' before identifier 'Buffer'
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>D:\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\DX90SDK\Samples\C++\DirectShow\BaseClasses\ctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

第一类问题的解决:错误发生在:operator=(LONG);函数定义中,这是因为在VC6中,如果没有显示的指定返回值类型,编译器将其视为默认整 形;但是vs2005不支持默认整形,解决这个问题不能修改每个没有显示指示返回值类型的函数地方,可以用wd4430来解决;具体的在工程选项中的c+ +/Command Line中添加/wd4430即可。 

2,在Tools->Options->Projects and solutions->vc++ directories->show directories for里选择include files
然后增加
D:\DX90SDK\Include
D:\DX90SDK\Samples\C++\DirectShow\BaseClasses
D:\DX90SDK\Samples\C++\Common
可能会问题依旧,调整一下include files的顺序吧,把他们都放在最后,例如我的环境:
$(VCInstallDir)include
  相关解决方案