编译DX9.0b程序时错误

operator=(LONG);报 "error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int"的处理方法
解决办法:
改:
        //static g_dwLastRefresh = 0;
        static DWORD g_dwLastRefresh = 0; //lspmodify
=================================================
我记得当时的处理方法不是这样,而是直接加入  /wd4430来屏蔽这个错。究竟哪个方法来得好呢?
于是我把相关代码拿出来建了个exe试看看,采用两种方法得到结果是不一样的。
别人的处理方法是对的,加入/wd4430有时是种偷懒的方法。

因为boss强调必须用DShow获取视频帧数据,又一次使用DX9.0b SDK, directshow是包含在directx SDK里面的。但这是在DirectX 9.0b之前的情况,在9.0c以后,directshow和DirectX就彻底分家了,directshow被移到了windows platform sdk里。如果你只安装了DirectX9.0b之后的版本,是没有directshow的。下载地址看这篇博客吧 http://blog.csdn.net/xxrhuanhuan/article/details/7646695 或者直接下面地址
ftp://ftp.ustb.edu.cn/pub/DirectX/9.0b/SDK/

 1. 编译基类源代码

   BaseClasses编译生成

路径:<DXSDK>/Samples/C++/DirectShow/BaseClasses

环境:VS2005
为了正确编译,需修改以下文件:
(a) ctlutil.h
D:/DXSDK/Samples/C++/DirectShow/BaseClasses/ctlutil.h
 
编译时提示错误:
BaseClasses/ctlutil.h(278) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
 
 修改:
    //operator=(LONG); //原代码
     COARefTime& operator=(LONG);
 
     改完这个之后,出现一堆错误,一个一个来改。
 
(b) wxdebug.cpp
d:/DXSDK/Samples/C++/DirectShow/BaseClasses/wxdebug.cpp
 
错误:
1>./wxdebug.cpp(567) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
改:
        //static g_dwLastRefresh = 0;
        static  DWORD g_dwLastRefresh = 0; //lspmodify
 
(c) winutil.cpp
d:/DXSDK/Samples/C++/DirectShow/BaseClasses/winutil.cpp
 
错误:
1>./winutil.cpp(2104) : error C2065: “Count”: 未声明的标识符
改:
    //for (UINT  Count = 0;Count < Result;Count++) 
     UINT Count; //lspmodify
   for (Count = 0;Count < Result;Count++) { //lspmodify
 
(d) outputq.cpp
d:/DXSDK/Samples/C++/DirectShow/BaseClasses/outputq.cpp
 
错误:
1>./outputq.cpp(664) : error C2065: “iDone”: 未声明的标识符
改:
     //for (long  iDone = 0;
long iDone; //lspmodify
for (iDone = 0; //lspmodify
 
在DirectShow 8.0的SDK里面就看到有下面的头文件,在我装的是9.0的,没有找到这些文件。所以编译的时候修改完上面的就可以通过了。但要是装8.0的话就要修改了。

2、头文件修改

(a) winnt.h
d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/include/winnt.h
 
在该文件头部添加:
#define POINTER_64 __ptr64 // add by peter lee
 
(b) vmr9.h
D:/DXSDK/Include/vmr9.h
       MixerPref9_RenderTargetRGB      = 0x1000,

       MixerPref9_RenderTargetYUV      = 0x00002000, //lsp add


error LNK2005: __encode_pointer 已经在 msvcrt.lib(MSVCR90.dll) 中定义
解决办法:打开属性—链接器—输入–忽略特定库–输入libcmt.lib即可解决问题

error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned int)" 
error LNK2001: 无法解析的外部符号 "void __cdecl operator delete(void *)" 
解决办法:在项目属性里添加一个附加依赖项:msvcrt.lib。这样再生成项目就不会出现上面的错误了。 

http://www.cnblogs.com/bo083/archive/2011/08/26/2155223.html


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值