最近在Mobile上搞directshow 的时候碰到了千奇百怪的链接错误,在这里记录一下。
第一步
最简单的错误。 这个错误类似于如下的error messsage:
1>media.obj : error LNK2001: unresolved external symbol IID_IVideoWindow
1>media.obj : error LNK2001: unresolved external symbol PIN_CATEGORY_PREVIEW
1>media.obj : error LNK2001: unresolved external symbol MEDIATYPE_Video
1>media.obj : error LNK2001: unresolved external symbol CLSID_VideoCapture
1>media.obj : error LNK2001: unresolved external symbol CLSID_FilterGraph
1>media.obj : error LNK2001: unresolved external symbol CLSID_CaptureGraphBuilder
这种样式的错误的原因就是你没有把那些directx常用的那些lib引入。解决方案就是在stdafx.h里面加入这段代码:
#pragma comment(lib, "atlosapis.lib")
#pragma comment(lib, "strmbase.lib")
#pragma comment(lib, "Strmiids.lib")
#pragma comment(lib, "dmoguids.lib")
第二步
很多时候把这些库引入了还是有其他的连接错误, 形如:
1>media.obj : error LNK2019: unresolved external symbol "public: __cdecl CTransInPlaceFilter::CTransInPlaceFilter(wchar_t *,struct IUnknown *,struct _GUID const &,long *)" (??0CTransInPlaceFilter@@QAA@PA_WPAUIUnknown@@ABU_GUID@@PAJ@Z)
referenced in function "public: __cdecl CRotateFilter::CRotateFilter(wchar_t *,struct IUnknown *,long *)" (??0CRotateFilter@@QAA@PA_WPAUIUnknown@@PAJ@Z)
1>media.obj : error LNK2001: unresolved external symbol "public: virtual long __cdecl CTransformFilter::FindPin(wchar_t const *,struct IPin * *)" (?FindPin@CTransformFilter@@UAAJPB_WPAPAUIPin@@@Z)
1>media.obj : error LNK2001: unresolved external symbol "public: virtual long __cdecl CBaseFilter::JoinFilterGraph(struct IFilterGraph *,wchar_t const *)" (?JoinFilterGraph@CBaseFilter@@UAAJPAUIFilterGraph@@PB_W@Z)
1>media.obj : error LNK2001: unresolved external symbol "public: virtual long __cdecl CBaseFilter::QueryVendorInfo(wchar_t * *)" (?QueryVendorInfo@CBaseFilter@@UAAJPAPA_W@Z)
这样的链接错误来源于工程里面的一个设定:
Configuration Properties=>C/C++=>Language
把Treat wchar_t as Built-in Type的值设成 NO! 这样这一类的问题大致解决了。 很多时候到这一步就可以编译了,当然我指的是Release build已经可以通过编译了,但是在debug版本编译的时候还有一个问题存在,这就是第三步。
第三步。
media.obj : error LNK2001: unresolved external symbol "public: virtual unsigned long __cdecl CBaseFilter::NonDelegatingRelease(void)" (?NonDelegatingRelease@CBaseFilter@@UAAKXZ)
这个是很经典的问题,原因在于随SDK发布的这个strmbase的lib在debug模式下是错误的,要一个新的strmbase.lib和strmbase.pdb的包来替代。对于PPC SDK,这个位置在
C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Lib\ARMV4I
下面,这个跟新的包的位置在http://www.alexfeinman.com/files/strmbase.zip可以下载到。
当然如果你不用这个包取代也可以, 你可以编译release版, release版总是work的, 更或者, 你自己去实现一个基类的NonDelegatingRelease方法也可以
分享到:
相关推荐
在Windows Mobile操作系统上,DirectShow同样被用来实现多媒体内容的处理和播放。"Baseclasses"是DirectShow的一部分,它提供了一组基础类,帮助开发者快速构建自己的DirectShow过滤器和滤波器图形。 DirectShow ...
DirectShow是一种强大的多媒体框架,由微软公司开发,它允许开发者在不同的操作系统版本上,包括Windows Mobile,实现音频和视频的捕获、处理和播放。本文将深入探讨如何在Windows Mobile上通过Visual C++(VC)利用...
【标题】"WindowsMobile上C#通过DirectShow控制摄像头完整演示工程"涉及到的是在移动设备上,使用C#编程语言并通过DirectShow库来操作和控制摄像头的技术。DirectShow是微软提供的一种多媒体处理框架,用于捕获、...
Windows Mobile DirectShow是微软为移动设备开发的多媒体处理框架,它允许开发者在Windows Mobile平台上创建强大的多媒体应用程序,包括播放、录制、编辑视频和音频内容。这个实例着重于如何利用DirectShow来加载和...
在Windows Mobile操作系统上,开发应用程序时,我们常常需要与网络进行通信,特别是在移动设备上,GPRS(General Packet Radio Service)是一种广泛使用的无线数据服务,它允许设备通过蜂窝网络进行持续的数据连接。...
在Windows Mobile上编程DirectShow,需要特别关注的是硬件兼容性和功耗管理。由于移动设备的硬件限制,可能需要选择适合低功耗的滤镜和设置,以确保性能和电池寿命。 "DirectShow摄像头视频捕捉.doc"这篇文章可能...
下面将详细阐述如何在Windows Mobile 6上实现GPRS连接,并通过`WMGPRSConn.cpp`和`WMGPRSConn.h`这两个文件中的代码进行讲解。 首先,我们需要了解在Windows Mobile平台上,GPRS连接主要依赖于`CeRas`(Compact ...
总的来说,"Windows Mobile 蓝牙连接程序"是一个实用工具,它简化了在Windows Mobile设备上使用蓝牙的过程,让用户能够更方便地利用蓝牙功能进行设备间的数据交互。然而,随着智能手机的发展,Windows Mobile操作...
4. 在Windows Mobile设备上,打开“连接设置”,选择“活动同步”,配置相应的连接选项,如网络设置、同步伙伴等。 5. 连接设备和电脑,ActiveSync会自动检测并建立连接,然后开始同步过程。 ActiveSync不仅仅是一...
在Windows Mobile上,我们同样可以利用DirectShow来实现复杂的视频捕获和处理任务。本文将重点讨论如何在Windows Mobile环境下创建自定义的SampleGrabber Filter,并结合.NET进行调用。 SampleGrabber Filter是...
Windows Mobile设备中心(64位)是一款专为Windows 7 64位操作系统设计的管理工具,它使得Windows Mobile系列智能手机能够通过USB数据线无缝地与个人电脑进行交互。这款软件提供了多种功能,包括文件同步、共享网络...
这份“Windowsmobile开发常见问题”文档很可能是为了解决这些常见问题提供的一份实用指南。以下是一些可能涵盖的知识点: 1. **设备兼容性**:Windows Mobile操作系统有不同的版本,如Windows CE、Windows Mobile ...
通过上述步骤,我们已经成功地在 Windows Mobile 设备上建立了一个可以连接到 SQL Server 数据库的应用程序。这对于需要在移动设备上实时访问企业级数据的应用场景来说是非常有用的。虽然 Windows Mobile 平台现在...
Windows Mobile 6.0 模拟器使用 Windows Mobile 6.0 模拟器是一个功能强大的工具,可以模拟企业邮件收发,主要用于测试和开发目的。在本文中,我们将详细介绍如何设置 Windows Mobile 6.0 模拟器来收发企业电子邮件...
这个压缩包包含了几个常见的应用程序,旨在帮助用户更高效地管理和利用他们的Windows Mobile设备。 首先,"任务管理1.exe"和"任务管理2.exe"是用于监控和管理设备上运行的应用程序的工具。这些任务管理器可以帮助...
对于初学者和寻求深入了解Windows Mobile开发的人来说,了解并解决这些常见问题至关重要。 1. **环境搭建**:首先,开发者需要安装Visual Studio,通常推荐使用支持Windows Mobile开发的版本,如Visual Studio 2008...
在Windows Mobile开发中,开发者经常会遇到各种问题,以下是一些常见的问题及其解答: 1. 创建智能设备应用程序:在Visual Studio中创建Windows Mobile应用时,应选择Visual C#或Visual Basic项目类型,然后选取...