轉自IT魔鬼訓練營
作者 網研所 2007年06月28日

SDK中Sample的編譯環境

如果使用Microsoft Visual Studio 2005,在工具->選項->項目和解決方案->vc++目錄中進行如下設置。

可執行文件:

D:\Program Files\Microsoft Visual Studio 8\VC

D:\Program Files\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86

\Microsoft.VC80.DebugMFC

D:\Program Files\Microsoft Visual Studio 8\VC\lib

D:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib

D:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include

D:\Program Files\Microsoft Visual Studio 8\VC\include

D:\DXSDK\Lib

D:\DXSDK\Bin

D:\DXSDK\Samples\C++\DirectShow\BaseClasses

D:\DXSDK\Samples\C++\Common\Include

D:\DXSDK\Include

包含文件:

D:\Program Files\Microsoft Visual Studio 8\VC\include

D:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include

D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include

D:\DXSDK\Include

D:\DXSDK\Samples\C++\DirectShow\BaseClasses

D:\DXSDK\Samples\C++\Common\Include

庫文件:

D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib

D:\Program Files\Microsoft Visual Studio 8\VC\lib

D:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib

D:\Program Files\Microsoft Visual Studio 8\VC

D:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\i386

D:\DXSDK\Lib

D:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug

D:\DXSDK\Samples\C++\DirectShow\BaseClasses\Release

D:\DXSDK\Samples\C++\DirectShow\BaseClasses



1針對編譯DXSDK\Samples\c++\Direct3D時出現的錯誤,進行解析。

錯誤例子:

CVTRES : fatal error CVT1100: 重複的資源。type:MANIFEST, name:1, language:0×0409

LINK : fatal error LNK1123: 轉換到COFF 期間失敗: 文件無效或損壞

解決方案:

我的編譯環境是Microsoft Visual Studio 2005

將所有工程的屬性(工程全選->右擊->屬性)->配置屬性->清單工具->輸入輸出->嵌入清單,選擇「否」,然後編譯,就OK了。

你可以參照微軟的官方說明:http://support.microsoft.com/kb/320216/zh-cn


2針對出現未聲明標識符的錯誤進行解析。

錯誤例子:for( m=0; m dwNumModes; m++ )

{

if( pDevice->modes[m].Width==640 && pDevice->modes[m].Height==480 )

{

error C2065: 「m」: 未聲明的標識符

像這種錯誤,你可以查找它的定義,在將它的定義複製到錯誤行的前面。如上述例子中,你可以在for的上一行添加long m;。就可以了。

3針對出現無法初始化問題的錯誤進行解析。

錯誤例子:

TCHAR* strLastSlash = _tcsrchr( str, TEXT(『\\』) )

錯誤:error C2440: 「初始化」: 無法從「const wchar_t *」轉換為「TCHAR *」

像這樣的錯誤,你可以在=的右邊進行強制轉換。如下:

TCHAR* strLastSlash = (TCHAR*)_tcsrchr( str, TEXT(『\\』) );


4針對警告被視為錯誤的問題進行解析。

錯誤例子:

c:\dxsdk\samples\c++\misc\dxdiagreport\dxdiaginfo.cpp(322) : error C2220: 警告被視為錯誤- 沒有生成「object」文件。

這種錯誤的原因是:原因是該文件的代碼頁為英文,而我們系統中的代碼頁為中文。

解決方案:啟動Microsoft Visual Studio 2005,文件->打開->選擇c:\dxsdk\samples\c++\misc\dxdiagreport\dxdiaginfo.cpp,然後保存。從新打開程序文件運行,此錯誤不再出現。


如果上述不能去掉錯誤,還可以點擊項目,右擊選擇屬性->配置屬性->c/c++->常規,將「警告視為錯誤」的選項改為「否」。就可以!


5編譯BaseClasses

正在編譯…

dllentry.cpp

D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\winnt.h(222) : error C2146: 語法錯誤: 缺少「;」(在標識符「PVOID64」的前面)

D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\winnt.h(222) : error C4430: 缺少類型說明符- 假定為int。注意: C++ 不支持默認明int

D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\winnt.h(5940) : error C2146: 語法錯誤: 缺少「;」(在標識符「Buffer」的前面)

D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\winnt.h(5940) : error C4430: 缺少類型說明符- 假定為int。注意: C++ 不支持默認明int

D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\winnt.h(5940) : error C4430: 缺少類型說明符- 假定為int。注意: C++ 不支持默認明int

D:\DXSDK\Include\uuids.h : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存為Unicode 格式以防止數據丟失

生成日誌保存在「file://d:\BaseClasses\Debug_Unicode\BuildLog.htm」

BaseClasses - 5 個錯誤,個警告

出現錯誤的地方:

typedef void *PVOID;

typedef void * POINTER_64 PVOID64;

更改:

#define POINTER_64 __ptr64///////gai

typedef void *PVOID;

typedef void * POINTER_64 PVOID64;////

錯誤:.\wxdebug.cpp(567) : error C4430: 缺少類型說明符- 假定為int。注意: C++ 不支持默認明int

錯誤地方:static g_dwLastRefresh = 0;

修改:static int g_dwLastRefresh = 0;

6編譯Capture,無法打開libci.lib

出現錯誤:LINK : fatal error LNK1104: 無法打開文件「libci.lib」

生成日誌保存在「file://d:\DXSDK\Samples\C++\DirectShow\Capture\CaptureTex\Debug\BuildLog.htm」

CaptureTex - 1 個錯誤,個警告

錯誤原因:缺少數據庫LIBCI.LIB在2003和2005中已經不存在了

解決方案:將庫文件指向VC6中的庫文件。
arrow
arrow
    全站熱搜

    tabrislin 發表在 痞客邦 留言(0) 人氣()