1、針對出現無法初始化問題的錯誤進行解析。
錯誤例子:
TCHAR* strLastSlash = _tcsrchr( str, TEXT(‘//’) )
error C2440: “初始化”: 無法從“const wchar_t *”轉換為“TCHAR *”
修改:
可以在=的右邊進行強制轉換。如下:
TCHAR* strLastSlash = (TCHAR*)_tcsrchr( str, TEXT(‘//’) );
2、針對警告被視為錯誤的問題進行解析。
錯誤例子:
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++->常規,將“警告視為錯誤”的選項改為“否”。就可以!
3、編譯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中的庫文件。
4、編譯PlayWndASF 錯誤:
playwndasf.obj : error LNK2001: 無法解析的外部符號“unsigned int (__stdcall* ATL::g_pfnGetThreadACP)(void)” (?g_pfnGetThreadACP@ATL@@3P6GIXZA)
urllaunch.obj : error LNK2001: 無法解析的外部符號“unsigned int (__stdcall* ATL::g_pfnGetThreadACP)(void)” (?g_pfnGetThreadACP@ATL@@3P6GIXZA)
./Debug_Unicode/PlayWndASF.exe : fatal error LNK1120: 1 個無法解析的外部命令
生成日誌保存在“file://d:/DXSDK/Samples/C++/DirectShow/Players/PlayWndASF/Debug_Unicode/BuildLog.htm”
PlayWndASF - 3 個錯誤,個警告
========== 全部重新生成: 1 已成功, 1 已失敗, 0 已跳過==========
更改:
5、編譯demos(D:/DXSDK/Samples/C++/Demos)向數據庫依賴項中添加atlsd.lib
錯誤:
StdAfx.cpp
d:/program files/microsoft directx sdk (april 2007)/include/d3d9types.h(1385) : warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存為Unicode 格式以防止數據丟失
d:/DXSDK/Samples/C++/common/include/D3DFile.h(56) : error C2061: 語法錯誤: 標識符“LPDIRECTXFILEDATA”
d:/DXSDK/Samples/C++/common/include/D3DFile.h(111) : error C2061: 語法錯誤: 標識符“LPDIRECTXFILEDATA”
d:/DXSDK/Samples/C++/common/include/D3DFile.h(113) : error C2061: 語法錯誤: 標識符“LPDIRECTXFILEDATA”
生成日誌保存在“file://d:/DXSDK/Samples/C++/Demos/Donuts4/Debug/BuildLog.htm”
Donuts4 - 3 個錯誤,個警告
========== 全部重新生成: 0 已成功, 1 已失敗, 0 已跳過==========
更改:
在dsdfile.h的頂部加入#include <dxfile.h>就可以 再次編譯出現錯誤:
1)檢查出錯文件是否忘記了添加#include”stdafx.h",如果忘記了,加上; 2)要註意下類和結構結束要加分號,要是忘了也會出錯。 3)#include”stdafx.h"一定要放在最開頭。 4)開始沒錯誤,如果是添加了幾個文件進當前項目,添加了#include”stdafx.h",還是出現了這個問題,退而求其次,可以選擇在解決方案目錄下,右鍵擊出錯的文件,屬性-》c/c++-》預編譯頭文件-》不使用。
7、錯誤17error MSB3073: 命令“regsvr32 /s /c ".........
解決辦法:
在項目上點右鍵,選擇屬性”->“配置屬性”->“常規”->“目標文件擴展名”,設置為.ocx 或者.dll;
在項目上在項目上點右鍵,選擇“屬性”->“配置屬性”->“鏈接器”->“ 常規 ”->“輸出文件”,設置為$(OutDir)$(ProjectName)$(TargetExt)
8、Activex 使用DirectShow的問題解決方案
下面的編譯問題:
strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol "class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A)
strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)
解決方法:
9、錯誤:在xxxctrl.h中加入下面的代碼
/////////////////////////////////////////////////////////////////////////////
// DllGetClassObject
extern "C"
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return AfxDllGetClassObject(rclsid, riid, ppv);
}
// DllCanUnloadNow
extern "C"
STDAPI DllCanUnloadNow(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return AfxDllCanUnloadNow();
}

解決辦法:
項目屬性-》配置屬性-》自定義生成步驟 ,修改“輸出”項為“從父級或項目默認屬性繼承”。
10、error:
vtkCommon.lib(vtkSmartPointerBase.obj) : error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項:值“0”不匹配值“2”(cloudviewer.obj 中)
1>vtkCommon.lib(vtkGarbageCollector.obj) : error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項: 值“0”不匹配值“2”(cloudviewer.obj 中)
1>vtkCommon.lib(vtkDebugLeaksManager.obj) : error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項:值“0”不匹配值“2”(cloudviewer.obj 中)
錯誤原因是:
Debug使用了Release的庫文件。
即使你連接庫裏面兩個都添加著呢,但是release庫文件放在了debug前面,也是出錯的。默認按順序使用庫文件。
類似錯誤:如release下使用了Debug的庫文件,報錯類似:
error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項:值“2”不匹配值“0”.
Tags: Microsoft 解決方案 error 英文 中文
文章來源: