由于需要进行视频采集,昨天开始搜索资料,发现现在流行的是DirectShow来进行开发,昨天下载安装了个DirectX 9.0 SDK,于是痛苦的配置旅程开始了。现在我们来重温一下这个痛苦的历程吧。先介绍下我的配置吧:
Microsoft DirectX 9.0 SDK + Microsoft Visual Stiduo 2005
我的Microsoft DirectX 9.0 SDK 安装在D盘根目录,进入这个目录D:\DXSDK\Samples\C++\DirectShow\Capture里面有几个项目文件,我们拿AMCap这个项目来用,首先我们拷贝一个副本AMCap1(为了保险起见!),要想看看AMCap最终的运行效果,我们可以进入这个目录:D:\DXSDK\Samples\C++\DirectShow\Bin第一个应该就是它了,相信你能找到的(就是那个叫AMCap.exe的!)
用Microsoft Visual Stiduo 2005打开工程,可能需要转换下,转换就是了,先什么也别做,开始编译工程(默认的配置管理器中的活动解决方案配置为Debug Unicode,活动解决方案平台是Win32),我得到了下面的错误:
amcap.cpp
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C2146: syntax error : missing ';' before identifier 'Buffer'
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
d:\DXSDK\include\uuids.h : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
.\amcap.cpp(2787) : error C2065: 'i' : undeclared identifier
双击输出窗口中的错误到错误发生处,上图中蓝色部分第一个错误的解决办法是在winnt.h文件中将(附1)
typedef void *PVOID;
typedef void * POINTER_64 PVOID64;
修改为
#define POINTER_64 __ptr64 //加上这一行
typedef void *PVOID;
typedef void * POINTER_64 PVOID64;
对于第二个错误改成:int i 就可以了。
修改完错误继续编译,发现编译已经没有错误了,只有一些警告,可以不去管它,但是有这样的一个错误:
LINK : fatal error LNK1104: 无法打开文件“..\..\baseclasses\debug_unicode\strmbasd.lib”
看错误的意思是缺少了一个库文件,于是在网上找了一下,原来需要先编译baseclasses,打开你的dx的sdk安装目录,本例为:
D:\DX90SDK\Samples\C++\DirectShow\
这里就有一个叫baseclasses的工程,为安全起见,请先备份此工程,然后打开该工程。转换后开始编译,我们收到了下面的错误:
.\wxdebug.cpp(567) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
.\winutil.cpp(2104) : error C2065: 'Count' : undeclared identifier
.\winutil.cpp(2106) : error C2228: left of '.peRed' must have class/struct/union
.\winutil.cpp(2106) : error C2228: left of '.peRed' must have class/struct/union
.\winutil.cpp(2107) : error C2228: left of '.peGreen' must have class/struct/union
.\winutil.cpp(2107) : error C2228: left of '.peGreen' must have class/struct/union
.\winutil.cpp(2108) : error C2228: left of '.peBlue' must have class/struct/union
.\winutil.cpp(2108) : error C2228: left of '.peBlue' must have class/struct/union
.\winutil.cpp(2124) : error C2228: left of '.peFlags' must have class/struct/union
.\outputq.cpp(664) : error C2065: 'iDone' : undeclared identifier
真正需要解决的是上面蓝色部分的三个错误,我们现在来开始解决(这里我们还是直接修改代码吧,通过修改配置也可以完成【附2】不过我们一会还需要编译其他三个版本,为了免去后面还要继续设置,这里直接通过修改代码解决)。
对于前一个错误
//将
static g_dwLastRefresh = 0;
//修改为
int static g_dwLastRefresh = 0;
第二个错误【附3】,在Count前面加上int就可以了(修改后编译后面还会出现类似的错误,照这样修改就是了!)
第三个错误,在出错的文件中会看到下面的代码,修改办法一并在下面列出,注释里有说明。
LONG iLost = 0;
LONG iDone = 0; //这是我们修改的地方,加入这一行代码
for (long iDone = 0;
iDone < nSamples || (m_nBatched != 0 && m_bSendAnyway);
) {
//pragma message (REMIND("Implement threshold scheme"))
ASSERT(m_nBatched < m_lBatchSize);
if (iDone < nSamples) {
m_ppSamples[m_nBatched++] = ppSamples[iDone++];
}
if (m_nBatched == m_lBatchSize ||
nSamples == 0 && (m_bSendAnyway || !m_bBatchExact)) {
LONG nDone;
DbgLog((LOG_TRACE, 4, TEXT("Batching %d samples"),
m_nBatched));
if (m_hr == S_OK) {
m_hr = m_pInputPin->ReceiveMultiple(m_ppSamples,
m_nBatched,
&nDone);
} else {
nDone = 0;
}
iLost += m_nBatched - nDone;
for (LONG i = 0; i < m_nBatched; i++) {
m_ppSamples[i]->Release();
}
m_nBatched = 0;
}
}
*nSamplesProcessed = iDone - iLost; //这是编译报错误的地方
OK,修改完了,我们进行编译,这下成功了。你会发现在目录D:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug_Unicode下有了一个库文件strmbasd.lib
现在我们来得到其他三个库文件,打开配置管理器,我们上面的配置是这样的:
活动解决方案配置为Debug Unicode,活动解决方案平台是Win32
分别修改如下的三种模式分别编译:
活动解决方案配置为Debug,活动解决方案平台是Win32
活动解决方案配置为Release Unicode,活动解决方案平台是Win32
活动解决方案配置为Release,活动解决方案平台是Win32
这样我们就得到了4个库文件。
D:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug下有了一个库文件strmbasd.lib
D:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug_Unicode下有了一个库文件strmbasd.lib
D:\DXSDK\Samples\C++\DirectShow\BaseClasses\Release下有了一个库文件STRMBASE.lib
D:\DXSDK\Samples\C++\DirectShow\BaseClasses\Release_Unicode下有了一个库文件STRMBASE.lib
现在大家再看看上面的那个红色的链接错误,知道怎么回事了吧。
好了,我们现在回去编译AMCap这个工程吧,怎么样,搞定了吧!
附1:
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,从而导致出错。
方法1:
在Tools -> Options -> Projects and Solutions -> VC++ Directories -> Include Files里确保系统包含目录(以S打头的)在最前面,同时在 project properties下面的“C/C++ -> General”中确保“Additional Include Directories”为空(因为它会被优先编译,这样就轮不到VC\PlatformSDK\Include\basetsd.h),所有的包含目录都应该在上面的include里面。这种方法不用改代码。
方法2:
在DXSDK自己的basetsd.h里自己定义#define POINTER_64 __ptr64
附2:
打开project->BaseClasses properties->configuration->C/C++ ->Command Line,增加/wd4430选项
附3:
C++标准语法的问题,因为在之前在for循环内定义的变量可以在for之外的地方使用,即在第一个for里for(int i,...),以后的for再使用i不必再声明,解决方法也很简单,打开project->BaseClasses properties->configuration->C/C++->Language->Force Comformance in For Loop Scrope设置为No即可。
转载自:http://www.cnblogs.com/wubiyu/archive/2009/10/22/1587825.html 在此谢谢原作者

tShow+VS2005配置日记 2010-10-11 18:31相关推荐

  1. ei capitan mysql_OSX 10.11 EI Capitan初步上手体验以及开发环境配置

    国庆放假在家,第一时间就升级了10.11,把玩了几天,也攻克了一些与开发环境相关的问题,在此跟大家分享一下. 作为一名开发人员,还是先谈谈与开发环境相关的问题吧.截止到目前发现了两个问题,可能会影响正 ...

  2. Win 10 + Ubuntu 18.04 双系统安装与深度学习环境配置安装踩坑实录(上篇)

    Win 10 + Ubuntu 18.04 双系统安装与深度学习环境配置安装踩坑实录(上篇) 折腾了两三天总算顺利在电脑上完成了装x的双系统安装,一路走来还比较顺利,主要在ubuntu的显卡设置上躺了 ...

  3. JDK(1.6,1.7,1.8,10,11)64位解压版配置使用

    JDK(1.6,1.7,1.8,10,11)64位解压版配置使用 安装jdk解压版 下载jdk地址   链接: https://pan.baidu.com/s/1sm8O5dF 密码: 86p4 将下 ...

  4. Windows7/10/11 Pac代理脚本及配置

    Windows7/10/11 Pac代理脚本及配置 代理自动配置(PAC)文件是一个 JavaScript 脚本,其核心是一个 JavaScript 函数,用来决定网页浏览请求(HTTP.HTTPS, ...

  5. Windows 7常见问答汇总一【2010.10】

    1)     Q:如何修正Windows7部分磁盘分区图标显示错误? A:出现此问题有如下两种状况: 1. 除了系统所在分区外的其他分区磁盘不显示卷标. 2. 部分分区图标损坏. 可以采用方法解决: ...

  6. 11.18 Apache用户认证 11.19/11.20 域名跳转 11.21 Apache访问日志

    2019独角兽企业重金招聘Python工程师标准>>> 11.18 Apache用户认证 htpasswd命令 >htpasswd命令是Apache的Web服务器内置工具,用于 ...

  7. 产业区块链发展周报(10.11—10.16)| 陀螺研究院

    摘要 产业动态: 云南发改委:推进区块链技术同云南发展八大重点产业 云南常务副省长:发展区块链产业态度坚决,千方百计形成区块链企业聚集态势 四川省:大力发展区块链等数字经济产业,加快新型基础设施建设 ...

  8. redis的redis.config文件配置与内容+10.30日之前的总结

    参考博客:redis.conf的一些配置+密码的设置(mac)+个人总结_雾喔的博客-CSDN博客_redis密码配置文件 这个是初始的redis.config的内容 # Redis configur ...

  9. X10服务器主板装系统黑屏,E1-471G,黑苹果10.11,Clover无法进入安装界面,直接黑屏重启...

    操作系统  Windows 10 专业版 主    板  (EA40_HC) 芯片组Intel HM77 处 理 器  CPU型号Intel 酷睿i3 2328M CPU 主频  2.2GHz 核心/ ...

最新文章

  1. Google Test(GTest)使用方法和源码解析——自动调度机制分析
  2. JS实现HTML标签转义及反转义
  3. flask+sqlite3+echarts3+ajax 异步数据加载
  4. MySQL与Python交互入门
  5. 算法之递推及其应用(递推关系的建立及在信息学竞赛中的应用 安徽 高寒蕊)...
  6. 主播冲刺GMV,全靠iPhone和茅台?
  7. linux平台设备驱动模型是什么意思,Linux设备驱动模型之我理解
  8. 计算机系统-记录Bochs调试器几个常用命令
  9. 计算机视觉基础:图像处理 Task 04:图像滤波
  10. js 中使用map的两种方式
  11. 在线生成数据字典工具
  12. 三.VirtualBox中安装Centos7.5.1804
  13. Android类似暗黑的游戏,像暗黑2一样的手游 类似暗黑2的手游盘点
  14. 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(18):方阵的幂级数
  15. js Qrcode.js实现文字内容通过二维码展示
  16. HBuilderX连接苹果手机iPhone预览移动端页面
  17. time(),date(),microtime()…
  18. 在del.icio.us , blinklist 和9Fav之间共享收藏
  19. 如何获取本机IP地址?快捷、简便“ipconfig /all”DOS命令
  20. HBuilder X不能运行到内置终端

热门文章

  1. 计算机机房管理系统范文,计算机机房管理系统探讨论文
  2. 树根互联冲刺科创板上市:累计亏损超11亿元,和三一重工关系密切
  3. 鸿蒙二部曲之一,网文封神之作,“鸿蒙二部曲”和“斗罗四部曲”你选择站哪边?...
  4. STRM--用Oracle Streams wizard生成配置脚本
  5. 影子系统toolwiz time freeze
  6. Day14 Date 包装类 Character
  7. 今天的文章只有一点点
  8. android 进球数据布局,10个有趣的数据,总结梅西令人难以置信的2018-19赛季!
  9. C++期末课程设计:设计一个学生学籍管理系统
  10. Python学习笔记:Python基础使用