direct show程序在windows moblie下编译出错的问题

时间:2022-12-23 17:58:14
目前我正在开发一个windows moblie下的基于direct show程序的视频采集和发送到网络的程序,详见下帖:
http://topic.csdn.net/u/20091016/09/e5345076-2471-4feb-982b-7d8f5bebbce2.html?seed=1470539788&r=60503434#r_60503434
目前遇到了一个程序编译出错的问题,当我把工程建立好了以后,我从CBaseFilter派生了一个类出来,但是在编译时遇到了如下错误(一共有好几个,下面只列出一个):
error LNK2019: 无法解析的外部符号 "public: __cdecl CBaseFilter::CBaseFilter(wchar_t const *,struct IUnknown *,class CCritSec *,struct _GUID const &)" (??0CBaseFilter@@QAA@PB_WPAUIUnknown@@PAVCCritSec@@ABU_GUID@@@Z),该符号在函数 "public: __cdecl CFilterNetSender::CFilterNetSender(struct IUnknown *,long *)" (??0CFilterNetSender@@QAA@PAUIUnknown@@PAJ@Z) 中被引用
然后我到网上搜索了一下,发现了这篇文章:http://blog.csdn.net/hhygcy/archive/2009/05/14/4183834.aspx,我按照文章中的第二点(在Configuration Properties=>C/C++=>Language中把Treat wchar_t as Built-in Type的值设成NO!)但是又会出现如下的编译错误(一共有9个,只列出2个):
CObjectList.obj : error LNK2019: 无法解析的外部符号 "void __cdecl AfxThrowArchiveException(int,unsigned short const *)" (?AfxThrowArchiveException@@YAXHPBG@Z),该符号在函数 "public: void __cdecl CArchive::EnsureRead(void *,unsigned int)" (?EnsureRead@CArchive@@QAAXPAXI@Z) 中被引用
1>WM_VideoCapture.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl CWinApp::CWinApp(unsigned short const *)" (??0CWinApp@@QAA@PBG@Z),该符号在函数 "public: __cdecl CWM_VideoCaptureApp::CWM_VideoCaptureApp(void)" (??0CWM_VideoCaptureApp@@QAA@XZ) 中被引用
请问这个到底该如何处理呀?
有没有大侠曾经处理过类似的软件呢?如果有的话能否发一份参考代码吗?

13 个解决方案

#1


这个2019的是说明这些函数没有导入就用了. 得加入相应的库.

#2


谢谢回复,不过可以肯定的是这些库都是已经导入的了,现在的问题就是char和wchar定义参数的函数无法兼容编译通过

#3


你导入了,也许你导入的不是正确的库

#4


是否需要更改设置:
Project->Setting->C/C++->Language->Treat wchar_t as Built-in Type 
设置为yes.

#5


呵呵,可能我写的太多,各位不好看清楚意思。这样,我把问题简化一下:
1. 我建立了一个基于windows moblie6的一个对话框程序,编译顺利通过;
2. 还是这个工程,我将“属性”-“配置属性”-“C/C++”-“将wchar_t视为内置类型”修改为“否”,这时编译就出错了,提示如下:
1>test.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl CWinApp::CWinApp(unsigned short const *)" (??0CWinApp@@QAA@PBG@Z),该符号在函数 "public: __cdecl CtestApp::CtestApp(void)" (??0CtestApp@@QAA@XZ) 中被引用
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual class CDocument * __cdecl CWinApp::OpenDocumentFile(unsigned short const *)" (?OpenDocumentFile@CWinApp@@UAAPAVCDocument@@PBG@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl CWinApp::DoMessageBox(unsigned short const *,unsigned int,unsigned int)" (?DoMessageBox@CWinApp@@UAAHPBGII@Z)
1>test.obj : error LNK2019: 无法解析的外部符号 "protected: void __cdecl CWinApp::SetRegistryKey(unsigned short const *)" (?SetRegistryKey@CWinApp@@IAAXPBG@Z),该符号在函数 "public: virtual int __cdecl CtestApp::InitInstance(void)" (?InitInstance@CtestApp@@UAAHXZ) 中被引用
1>testDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl CWnd::Create(unsigned short const *,unsigned short const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,struct CCreateContext *)" (?Create@CWnd@@UAAHPBG0KABUtagRECT@@PAV1@IPAUCCreateContext@@@Z)
1>testDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl CWnd::CreateEx(unsigned long,unsigned short const *,unsigned short const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,void *)" (?CreateEx@CWnd@@UAAHKPBG0KABUtagRECT@@PAV1@IPAX@Z)
1>testDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl CWnd::CreateEx(unsigned long,unsigned short const *,unsigned short const *,unsigned long,int,int,int,int,struct HWND__ *,struct HMENU__ *,void *)" (?CreateEx@CWnd@@UAAHKPBG0KHHHHPAUHWND__@@PAUHMENU__@@PAX@Z)
1>testDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl CDialog::Create(unsigned short const *,class CWnd *)" (?Create@CDialog@@UAAHPBGPAVCWnd@@@Z)

有没有大侠能说明一下这个问题的原因呀,该如何解决呢?(解决的前提条件是保持将“wchar_t视为内置类型”保持为“否”)

#6


这个问题还要说明一下,我如果用VS2005就会出现上面的问题,但是使用VS2008就不会出现上面的问题了,有没有大侠能指点一下到底是为什么呢?

#7


char和wchar定义参数的函数无法兼容的问题,,还是自己手动改吧,少动编译器里面的东东比较好,有的时候会越改错误越多,把你搞晕,时间是宝贵的,呵呵

#8


引用 6 楼 yyfa6 的回复:
这个问题还要说明一下,我如果用VS2005就会出现上面的问题,但是使用VS2008就不会出现上面的问题了,有没有大侠能指点一下到底是为什么呢?


.CF 的魅力所在吧...

#9


目前编译的问题已经解决了,就是按照网上的资料将
Project->Setting->C/C++->Language->Treat wchar_t as Built-in Type
设置为No。
但是请一定注意,这个设置在vs2008下才有用,如果采用vs2005则会出现其它的编译错误。(我本来是在vs2005上开发,结果这个编译的问题硬是搞了两天,后来实在不行了在人家的vs2008上跑了一下后才发现的,如果有大侠能解释一下这个原因并说明一下在vs2005下该如何处理就好了)。

帖子保留到明天,明天下班前结贴。

#10


这个应该不是IDE的问题
我只说说看区别,vs2005没有自带的PPC SDK, 这里PPC的SDK是自己后来装上去的
而VS2008自带了Windows Mobile 5.0 SDK R2
所以你用vs2008编译的时候实际上#include和链接的时候用的是Windows Mobile 5.0 SDK R2
而vs2005编译的时候用的另一自行安装的Windows Mobile 5.0 Pocket PC SDK
如果你有兴趣可以比较一下SDK的异同:)

#11


to hhygcy:
谢谢您的提醒,sdk确实有可能就是引起编译问题的原因。有空的话我会比较一下这两个sdk之间的区别的,呵呵。

#12


lz比较没,结果怎样了,呵

#13


楼主是怎么解决的呀,可以仔细说一下不,如果改成no的话不是又会出现下面的问题吗
public: __cdecl CBaseFilter::CBaseFilter(wchar_t const *,struct IUnknown *,class CCritSec *,struct _GUID const &)" (??0CBaseFilter@@QAA@PB_WPAUIUnknown@@PAVCCritSec@@ABU_GUID@@@Z),

#1


这个2019的是说明这些函数没有导入就用了. 得加入相应的库.

#2


谢谢回复,不过可以肯定的是这些库都是已经导入的了,现在的问题就是char和wchar定义参数的函数无法兼容编译通过

#3


你导入了,也许你导入的不是正确的库

#4


是否需要更改设置:
Project->Setting->C/C++->Language->Treat wchar_t as Built-in Type 
设置为yes.

#5


呵呵,可能我写的太多,各位不好看清楚意思。这样,我把问题简化一下:
1. 我建立了一个基于windows moblie6的一个对话框程序,编译顺利通过;
2. 还是这个工程,我将“属性”-“配置属性”-“C/C++”-“将wchar_t视为内置类型”修改为“否”,这时编译就出错了,提示如下:
1>test.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl CWinApp::CWinApp(unsigned short const *)" (??0CWinApp@@QAA@PBG@Z),该符号在函数 "public: __cdecl CtestApp::CtestApp(void)" (??0CtestApp@@QAA@XZ) 中被引用
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual class CDocument * __cdecl CWinApp::OpenDocumentFile(unsigned short const *)" (?OpenDocumentFile@CWinApp@@UAAPAVCDocument@@PBG@Z)
1>test.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl CWinApp::DoMessageBox(unsigned short const *,unsigned int,unsigned int)" (?DoMessageBox@CWinApp@@UAAHPBGII@Z)
1>test.obj : error LNK2019: 无法解析的外部符号 "protected: void __cdecl CWinApp::SetRegistryKey(unsigned short const *)" (?SetRegistryKey@CWinApp@@IAAXPBG@Z),该符号在函数 "public: virtual int __cdecl CtestApp::InitInstance(void)" (?InitInstance@CtestApp@@UAAHXZ) 中被引用
1>testDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl CWnd::Create(unsigned short const *,unsigned short const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,struct CCreateContext *)" (?Create@CWnd@@UAAHPBG0KABUtagRECT@@PAV1@IPAUCCreateContext@@@Z)
1>testDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl CWnd::CreateEx(unsigned long,unsigned short const *,unsigned short const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,void *)" (?CreateEx@CWnd@@UAAHKPBG0KABUtagRECT@@PAV1@IPAX@Z)
1>testDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl CWnd::CreateEx(unsigned long,unsigned short const *,unsigned short const *,unsigned long,int,int,int,int,struct HWND__ *,struct HMENU__ *,void *)" (?CreateEx@CWnd@@UAAHKPBG0KHHHHPAUHWND__@@PAUHMENU__@@PAX@Z)
1>testDlg.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl CDialog::Create(unsigned short const *,class CWnd *)" (?Create@CDialog@@UAAHPBGPAVCWnd@@@Z)

有没有大侠能说明一下这个问题的原因呀,该如何解决呢?(解决的前提条件是保持将“wchar_t视为内置类型”保持为“否”)

#6


这个问题还要说明一下,我如果用VS2005就会出现上面的问题,但是使用VS2008就不会出现上面的问题了,有没有大侠能指点一下到底是为什么呢?

#7


char和wchar定义参数的函数无法兼容的问题,,还是自己手动改吧,少动编译器里面的东东比较好,有的时候会越改错误越多,把你搞晕,时间是宝贵的,呵呵

#8


引用 6 楼 yyfa6 的回复:
这个问题还要说明一下,我如果用VS2005就会出现上面的问题,但是使用VS2008就不会出现上面的问题了,有没有大侠能指点一下到底是为什么呢?


.CF 的魅力所在吧...

#9


目前编译的问题已经解决了,就是按照网上的资料将
Project->Setting->C/C++->Language->Treat wchar_t as Built-in Type
设置为No。
但是请一定注意,这个设置在vs2008下才有用,如果采用vs2005则会出现其它的编译错误。(我本来是在vs2005上开发,结果这个编译的问题硬是搞了两天,后来实在不行了在人家的vs2008上跑了一下后才发现的,如果有大侠能解释一下这个原因并说明一下在vs2005下该如何处理就好了)。

帖子保留到明天,明天下班前结贴。

#10


这个应该不是IDE的问题
我只说说看区别,vs2005没有自带的PPC SDK, 这里PPC的SDK是自己后来装上去的
而VS2008自带了Windows Mobile 5.0 SDK R2
所以你用vs2008编译的时候实际上#include和链接的时候用的是Windows Mobile 5.0 SDK R2
而vs2005编译的时候用的另一自行安装的Windows Mobile 5.0 Pocket PC SDK
如果你有兴趣可以比较一下SDK的异同:)

#11


to hhygcy:
谢谢您的提醒,sdk确实有可能就是引起编译问题的原因。有空的话我会比较一下这两个sdk之间的区别的,呵呵。

#12


lz比较没,结果怎样了,呵

#13


楼主是怎么解决的呀,可以仔细说一下不,如果改成no的话不是又会出现下面的问题吗
public: __cdecl CBaseFilter::CBaseFilter(wchar_t const *,struct IUnknown *,class CCritSec *,struct _GUID const &)" (??0CBaseFilter@@QAA@PB_WPAUIUnknown@@PAVCCritSec@@ABU_GUID@@@Z),