DirectShow在VS2015中PVOID64問題和配置問題

在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那麼處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章