VS2010运行DirectShow的错误—typedef void * POINTER_64 PVOID64
2015-04-04 00:21
302 查看
根据于老师给的link,
http://wiki.opencv.org.cn/index.php/%E4%BD%BF%E7%94%A8DirectShow%E9%87%87%E9%9B%86%E5%9B%BE%E5%83%8F#.E4.BE.8B.E7.A8.8B
编译Directshow代码时出现如下问题:
error C2146: 语法错误 : 缺少“;”(在标识符“PVOID64”的前面)
error C2146: 语法错误 : 缺少“;”(在标识符“Buffer”的前面)
error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
网路上查了些资料,总结下原因大概是:
打开winnt.h文件,发现问题就是在winnt.h头文件中无POINTER_64的定义造成的。搜索vc下的头文件,发现在basetsd.h头文件中有POINTER_64的定义,而在winnt.h头文件中也包含了该头文件。
尝试了几种解决方案:
Solution 1:
通过调整IDE 工具-> 选项-> 项目vc++目录中包含文件include的顺序,将Platform
SDK头文件目录放在Direct Show头文件目录前,使Direct Show需要的winnt.h所在文件夹在最上面。
Result:
这里尝试没有成功,问题依然存在,待解决,可能与Direct X不同。
Solution 2:
按照http://blog.sina.com.cn/s/blog_591a183f0100cahp.html的方法设置配置;
在command中添加/wd4430
error C4430被fix,但是error C2146错误仍然存在,
Solution 3:
typedef void *PVOID;
typedef void * POINTER_64 PVOID64;
在它之前加下:
#define POINTER_64 __ptr64
Result:
有效,编译通过,更改winnt.h文件需要赋予管理员权限。
Solution 4:
将winnt.h文件中的#include <basetsd.h>改为#include "basetsd.h"
Result:
有效,编译通过,更改winnt.h文件需要赋予管理员权限。
方案4是将包含文件更改,而方案3来是将未知类型define一个类型,我最后就用了4那么处理。
http://wiki.opencv.org.cn/index.php/%E4%BD%BF%E7%94%A8DirectShow%E9%87%87%E9%9B%86%E5%9B%BE%E5%83%8F#.E4.BE.8B.E7.A8.8B
编译Directshow代码时出现如下问题:
error C2146: 语法错误 : 缺少“;”(在标识符“PVOID64”的前面)
error C2146: 语法错误 : 缺少“;”(在标识符“Buffer”的前面)
error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
网路上查了些资料,总结下原因大概是:
打开winnt.h文件,发现问题就是在winnt.h头文件中无POINTER_64的定义造成的。搜索vc下的头文件,发现在basetsd.h头文件中有POINTER_64的定义,而在winnt.h头文件中也包含了该头文件。
尝试了几种解决方案:
Solution 1:
通过调整IDE 工具-> 选项-> 项目vc++目录中包含文件include的顺序,将Platform
SDK头文件目录放在Direct Show头文件目录前,使Direct Show需要的winnt.h所在文件夹在最上面。
Result:
这里尝试没有成功,问题依然存在,待解决,可能与Direct X不同。
Solution 2:
按照http://blog.sina.com.cn/s/blog_591a183f0100cahp.html的方法设置配置;
在command中添加/wd4430
error C4430被fix,但是error C2146错误仍然存在,
Solution 3:
typedef void *PVOID;
typedef void * POINTER_64 PVOID64;
在它之前加下:
#define POINTER_64 __ptr64
Result:
有效,编译通过,更改winnt.h文件需要赋予管理员权限。
Solution 4:
将winnt.h文件中的#include <basetsd.h>改为#include "basetsd.h"
Result:
有效,编译通过,更改winnt.h文件需要赋予管理员权限。
方案4是将包含文件更改,而方案3来是将未知类型define一个类型,我最后就用了4那么处理。
相关文章推荐
- 解决typedef void * POINTER_64 PVOID64; 问题
- 解决 typedef void POINTER_64 PVOID64; 问题
- 关于 typedef void * POINTER_64 PVOID64;问题
- 解决 typedef void * POINTER_64 PVOID64; 问题
- typedef void * POINTER_64 PVOID64中,POINTER_64没有定义
- 解决typedef void * POINTER_64 PVOID64; 问题
- 解决 typedef void * POINTER_64 PVOID64; 问题
- 解决VS2005编译 typedef void * POINTER_64 PVOID64错误
- typedef void * POINTER_64 PVOID64错误
- 解决VS 编译 typedef void * POINTER_64 PVOID64错误
- DirectShow 在VS2005/VS2010中环境配置和编译运行出现 winnt.h(5940)错误问题的解决
- VS 编译 typedef void * POINTER_64 PVOID64错误
- 解决VS 编译 typedef void * POINTER_64 PVOID64错误
- x64 win7系统下VS2010运行显示图片程序,出现错误:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 当您尝试从 64 位 SQL Server 客户端上运行分布式的查询到链接的 32 位 SQL Server 时,您可能会收到一条错误消息
- x86_64运行i868的可运行文件的错误提示(文件存在) bash: ./bin/mysql: No such file or directory
- 编译错误: pointer to void not legal here
- cocos2d-x 在IDE vs2010 出现error C2146: 语法错误: 缺少“;”(在标识符“PVOID64”的前面)编译错误解决方案
- rose2003运行时MEM_BAD_POINTER错误的解决
- 运行Eclipse,Android lint出现错误:java.lang.NullPointerException