转帖:DirectShow 在VS2005中环境配置

2023-11-16

转载请标明是引用于 http://blog.csdn.net/chenyujing1234

 

baseclasses参考代码(VS2005下编译通过):

 http://www.rayfile.com/zh-cn/files/12ac1b0c-7335-11e1-94b4-0015c55db73d/

 

先介绍系统环境:
XP Professional sp2
visual studio 2005 version 8.0.50727.42
DirectX 9.0(9.0b) SDK Update - (Summer 2003)


首先,就是编译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
$(VCInstallDir)atlmfc\include
$(VCInstallDir)PlatformSDK\include
$(FrameworkSDKDir)include
D:\DX90SDK\Include
D:\DX90SDK\Samples\C++\DirectShow\BaseClasses
D:\DX90SDK\Samples\C++\Common
然 后在project->BaseClasses properties->configuration->C/C++ -> General->Additional Include Directories里面的内容(.,..\..\..\..\include)删掉,重新编译,PVOID64的错误消失,原因如下:
POINTER_64 是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中(Microsoft Visual Studio 8\VC\PlatformSDK\Include\basetsd.h(23):#define POINTER_64 __ptr64),但DXSDK自己也带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错,只需要改变include files的优先级即可。当然,也可以改写winnt.h中的代码,在下面这两行:typedef   void   *PVOID;  
typedef   void   *POINTER_64   PVOID64;
之前增加一行:
#define   POINTER_64   __ptr64

3,到目前为止,还剩下:


BaseClasses\ctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
这个错误,解决方法如下:
打开project->BaseClasses properties->configuration->C/C++ ->Command Line,增加/wd4430选项。


4, 接着编译,提示error C2065: 'Count' : undeclared identifier等等错误

这个是微软的历史遗留问题了,C++标准语法的问题,因为在之前在for循环内定义的变量可以在for之外的地方使用,即 在第一个for里for(int i,...),以后的for再使用i不必再声明,解决方法也很简单,打开project->BaseClasses properties->configuration->C/C++->Language->Force Comformance in For Loop Scrope设置为No即可。当然,也可以手动改代码,增加一个声明就是了。

经过上面几个步骤,应该是可以顺利编译了,对于其它版本的工程,照样设置就可以了,总共编译出下面4个文件备用:
BaseClasses\Debug\strmbasd.lib
BaseClasses\Debug_Unicode\strmbasd.lib
BaseClasses\Release\STRMBASE.lib
BaseClasses\Release_UnicodeSTRMBASE.lib

在lib里面加入

commctrl.lib
coredll.lib
strmiids.lib
strmbase.lib
uuid.lib
ole32.lib
commdlg.lib

你或许需要在Tools->Options->Projects and solutions->vc++ directories->show directories for->library files里把它们加进去。
赶快编译DX90SDK\Samples\C++\DirectShow\Players\PlayDMO工程试试看吧。

5、在编译完PlayDMO后,我试着自己编译自己写的一个程序,结果报错了。
1>------ 已启动生成: 项目: AviPlayerDemo_new, 配置: Debug Win32 ------
1>正在链接...
1>CDXGraph.obj : error LNK2019: 无法解析的外部符号 "int __cdecl wsprintfWInternal(unsigned short *,unsigned short const *,...)" (?wsprintfWInternal@@YAHPAGPBGZZ),该符号在函数 "private: void __thiscall CDXGraph::AddToObjectTable(void)" (?AddToObjectTable@CDXGraph@@AAEXXZ) 中被引用
1>C:\Documents and Settings\Administrator\桌面\AviPlayerDemo_new\Debug\AviPlayerDemo_new.exe : fatal error LNK1120: 1 个无法解析的外部命令
1>生成日志保存在“file://c:\Documents and Settings\Administrator\桌面\AviPlayerDemo_new\Debug\BuildLog.htm”
1>AviPlayerDemo_new - 2 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========


很郁闷找了半天没有发现什么不对,因为都是Debug版的。

后来发现我的工程里的选项是:

而baseclasses里是设置"将wchar_t视为内置类型" 一项设置成了否。

解决方法显而易见:把他们改统一。问题解决了。

 

 


以上资料整理自下面3个blog,一并列出:
DirectShow在VS2005中PVOID64问题和配置问题
http://www.cnblogs.com/RunOnTheWay/archive/2008/01/17/1043705.html
DirectShow 在VS2005中环境配置
http://blog.cnii.com.cn/?uid-75821-action-viewspace-itemid-24418
Some DirectShow Samples Break in Visual Studio 2005
http://blogs.msdn.com/mikewasson/archive/2005/05/23/some-directshow-samples-break-in-visual-studio-2005.aspx


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转帖:DirectShow 在VS2005中环境配置 的相关文章

  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • ImageDataGenerator生成器的flow,flow_from_directory用法

    flow flow self X y batch size 32 shuffle True seed None save to dir None save prefix save format png 接收numpy数组和标签为参数 生成经
  • kibana基本操作

    创建一个索引 put net log settings index number of shards 1 设置分片数量 number of replicas 0 设置备份数量 查看索引的信息 GET net log settings 返回的
  • Eclipse创建一个Web项目的完成步骤(误删sever和tomcat的解决方案)

    一 部署web项目 打开Eclipse 创建一个工作空间 点击File gt NEW gt Dynamic web project 选择New Runtime gt 从自己电脑文件夹中选择已经下载好的tomcat 我这里下载的是8的版本 就
  • [Cryptography]1.对称密钥和非对称密钥 2.计算modulo inverse 3.计算possible key

    对称密钥和非对称密钥 对称密钥顾名思义就是两个end users使用同一个key Secret Key来进行加密解密 最大的问题就是如何安全的传输SK给另一方 非对称密钥就是说每个人都拥有一个public key和一个private key
  • AC配置文件

    AC1 sh run no service password encryption hostname AC1 sysLocation China sysContact 400 810 9119 username admin privileg
  • 谁能成为真正的「以太坊Killer」?公链aelf准备从经济模型入手

    由于底层技术差异不大 许多公链在基础设施建设 性能标新 以及跨链互操作等方面的实力并没有太多距离 因此 如果想在公链赛道上胜出 成为真正的 以太坊Killer 就需要 另辟蹊径 从经济模式上入手 继而形成差异竞争优势 作者 碳6 编辑 黑土
  • transformers之中mt5和t5的区别

    为了查看transformers结构之中mt5结构和t5结构的区别 这里采用代码对比法 相同的程序分别调用mt5结构和t5结构 使用mt5的结构 from transformers import T5Tokenizer T5ForCondi
  • 一份 Go 开发者学习路线图

    Go 开发者路线图 如何成为一名 Go 开发者的路线图 参考 Go 开发者路线图
  • deepin更新到15.10后任务栏(dde-dock)消失

    两个提示 libdde disk mount plugin so 和系统不兼容 libsystem tray so 和系统不兼容 在终端运行dde dock后 DockPlugin load plugin failed 无法加载库 usr
  • 开源图片文件服务器,XImageServer

    软件简介 XImageServer 一个超级简单的PHP图片服务器 适用对象 中小型网站 图片存储在自己的服务器 并且毫无预见性的时候会使用同一图片的 不同尺寸 特点 1 核心只有一个PHP文件 2 前端图片服务器惰性从NFS等其他文件系统
  • 【STM32标准库】【基础知识】时钟系统

    文章目录 时钟 时钟的作用 时钟的产生 F4系列的时钟系统 时钟源 总线 标准库的时钟设置 内部高速时钟设置 外部高速时钟设置 AHB时钟设置 APB1 2时钟设置 默认值 文章基于适用于STM32F4系列 作者使用STM32F401CCU
  • Linux MISC 驱动实验

    目录 一 MISC 设备驱动简介 misc deregister 函数 二 MISC驱动编写 1 编写框架 2 platform结构体对应的函数 2 宏定义和miscbeep设备结构体 3 定义miscdevice结构体 字符设备操作集 4
  • 浅谈Nginx主配置文件

    浅谈Nginx主配置文件 1 Nginx配置文件组成部分 2 Nginx主配置文件结构 3 Nginx 全局配置 1 正常运行必备的配置 2 性能优化相关的配置 3 事件驱动相关的配置 4 调试和定位配置 1 Nginx配置文件组成部分 N
  • 【Mac使用系列】Mac锁屏及快捷键

    mac锁屏办法 我有所尝试 可用系统自带锁屏快捷键 Ctrl Command Q 或者参考方法2 直接设置TouchBar 这两种办法 亲测可用 我直接设置了TouchBar 锁屏解锁离得很近 比较方便 随你选 Ctrl Shift Pow
  • Python3,selenium动态下载某库PPT文档,省下的钱可以撸串了!!!

    selenium动态下载某库PPT文档 1 引言 2 代码实战 2 1 思路分析 2 2 页面分析 2 3 代码展示 2 4 代码解析 3 总结 1 引言 小鱼 你看啥嘞 把显示屏亮度调的这么暗 小屌丝 这 没有你想的那样 我这是再学习算法
  • property_get函数使用

    在 域的使用方法 int property get const char key char value const char default value int property set const char key const char
  • 设置div中的背景颜色及div中的字体颜色

    div style background black color white 菜单3 div 这样就设置了这个div的背景颜色为黑色 即background属性的颜色 字体颜色为白色 即color属性的颜色 效果如下图
  • C语言学习开头以及个人目标

    一 自我介绍 本人是一个来自某末流211大学的本科生 因为高考的时候发挥失常了 原本可以去一些末985垫底专业或中211的热门专业 最后只能是双非一本随便挑 但是因为不甘心失败就冲了好学校的差专业 最终还是调剂了材料专业 后来好好学习想转专
  • vi/vim 设置tab为4个空格

    vim 编辑器中 tab 有时不是4个空格 代码看起来比较凌乱 配置文件位置 etc vim vimrc Kali linux set ts 4 set softtabstop 4 set shiftwidth 4 set expandta
  • 转帖:DirectShow 在VS2005中环境配置

    转载请标明是引用于 http blog csdn net chenyujing1234 baseclasses参考代码 VS2005下编译通过 http www rayfile com zh cn files 12ac1b0c 7335 1