在vs2015上運行DirectShow的錯誤,typedef void* POINTER_64 PVOID64
編譯Directshow代碼時出現如下問題:
error C2146: 語法錯誤 : 缺少“;”(在標識符“PVOID64”的前面)
error C2146: 語法錯誤 : 缺少“;”(在標識符“Buffer”的前面)
error C4430: 缺少類型說明符 - 假定爲 int。注意: C++ 不支持默認 int
網絡上查了些資料,總結原因大概是:
打開winnt.h文件,發現問題就是在winnt.h文件中五POINTER_64的定義造成的。
嘗試了幾種解決方案:
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那麼處理。