轉自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中的庫文件。
- May 13 Tue 2008 00:41
directx SDK中Sample的編譯錯誤及其解決方案-1
close
全站熱搜
留言列表