- 論壇徽章:
- 0
|
我也是個(gè)初學(xué)者,要是以下的文章有什么錯(cuò)誤,請(qǐng)給我留言,謝謝!
![]()
[1] 請(qǐng)確保您的機(jī)子上已經(jīng)安裝了VS 2005和DirectX 9.0b SDK。DX9.0 SDK的下載地址就不寫(xiě)了,自己在網(wǎng)上找吧。ㄎ业腄X9.0安裝在D盤(pán)根目錄下)
[2] 首先編譯SamplesC++DirectShowBaseClasses目錄下的baseclasses.sln以得到兩個(gè)庫(kù)文件(strbase.lib和strmbase.lib)。以下介紹的主要是如何修改編譯中的錯(cuò)誤,這也是眾多文章中沒(méi)有敘述的部分。自己寫(xiě)的,有些啰嗦,請(qǐng)?jiān)徟叮?br />
![]()
進(jìn)入DirectShow的安裝目錄,找到SamplesC++DirectShowBaseClasses,雙擊baseclasses.sln打開(kāi)該解決方案。首先看到的會(huì)是Visual Studio的轉(zhuǎn)換向?qū),不用管它,直接Next到Finish。
點(diǎn)擊F5,調(diào)試運(yùn)行,你會(huì)見(jiàn)到下面的錯(cuò)誤(至少我編譯的時(shí)候就是這樣的結(jié)果):
1>------ Build started: Project: BaseClasses, Configuration: Debug Unicode Win32 ------
1>Compiling...
1>dllentry.cpp
1>D:Program FilesMicrosoft Visual Studio 8VCPlatformSDKincludewinnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64'
1>D:Program FilesMicrosoft Visual Studio 8VCPlatformSDKincludewinnt.h(222) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>D:Program FilesMicrosoft Visual Studio 8VCPlatformSDKincludewinnt.h(5940) : error C2146: syntax error : missing ';' before identifier 'Buffer'
1>D:Program FilesMicrosoft Visual Studio 8VCPlatformSDKincludewinnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>D:Program FilesMicrosoft Visual Studio 8VCPlatformSDKincludewinnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:DXSDKSamplesC++DirectShowBaseClassesctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:DXSDKincludeuuids.h : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
1>Build log was saved at "
file://d:DXSDKSamplesC++DirectShowBaseClassesDebug_UnicodeBuildLog.htm
"
1>BaseClasses - 6 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
沒(méi)辦法,改錯(cuò)。(網(wǎng)上老外的文章中說(shuō)過(guò),不過(guò)也不明白什么意思!
![]()
)
雙擊1>D:Program FilesMicrosoft Visual Studio 8VCPlatformSDKincludewinnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64' 跳轉(zhuǎn)到出錯(cuò)的位置。
你會(huì)見(jiàn)到錯(cuò)誤語(yǔ)句:typedef void * POINTER_64 PVOID64;
這樣的定義,VS2005中是不支持的。將其修改為兩條語(yǔ)句:
#define POINTER_64 __ptr64
typedef void *PVOID;
typedef void *POINTER_64 PVOID64;
然后調(diào)試運(yùn)行,會(huì)發(fā)現(xiàn)還有1條錯(cuò)誤:
1>------ Build started: Project: BaseClasses, Configuration: Debug Unicode Win32 ------
1>Compiling...
1>dllentry.cpp
1>d:DXSDKSamplesC++DirectShowBaseClassesctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:DXSDKincludeuuids.h : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
1>Build log was saved at "
file://d:DXSDKSamplesC++DirectShowBaseClassesDebug_UnicodeBuildLog.htm
"
1>BaseClasses - 1 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
只有繼續(xù)改啦!雙擊1>d:DXSDKSamplesC++DirectShowBaseClassesctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 跳轉(zhuǎn)到出錯(cuò)的位置。
你會(huì)見(jiàn)到錯(cuò)誤語(yǔ)句:operator=(LONG);
只是沒(méi)有返回值嘛!給它加一個(gè)就行了,將其改為:LONG operate=(LONG);
再次調(diào)試運(yùn)行,哇塞!更多錯(cuò)誤:
1>------ Build started: Project: BaseClasses, Configuration: Debug Unicode Win32 ------
1>Compiling...
1>wxdebug.cpp
1>.wxdebug.cpp(534) : warning C4996: '_vsnwprintf' was declared deprecated
1> D:Program FilesMicrosoft Visual Studio 8VCincludestdio.h(450) : see declaration of '_vsnwprintf'
1> Message: 'This function or variable may be unsafe. Consider using _vsnwprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See _disibledevent="file:///d:DXSDKSamplesC++DirectShowBaseClassesDebug_UnicodeBuildLog.htm">file://d:DXSDKSamplesC++DirectShowBaseClassesDebug_UnicodeBuildLog.htm"
1>BaseClasses - 10 error(s), 2 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
有錯(cuò)就改啦!雙擊1>.wxdebug.cpp(567) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 跳到出錯(cuò)位置。
你會(huì)見(jiàn)到出錯(cuò)語(yǔ)句:static g_dwLastRefresh = 0;
靜態(tài)類(lèi)型變量有這么定義的嗎?總得給個(gè)類(lèi)型吧!將其改為:static DWORD g_dwLastRefresh = 0;為什么類(lèi)型指定為DWORD?看程序中的語(yǔ)句就明白了——保證相同類(lèi)型的變量進(jìn)行運(yùn)算
![]()
。
再次調(diào)試運(yùn)行:
1>------ Build started: Project: BaseClasses, Configuration: Debug Unicode Win32 ------
1>Compiling...
1>winutil.cpp
1>.winutil.cpp(2104) : error C2065: 'Count' : undeclared identifier
1>.winutil.cpp(2106) : error C2228: left of '.peRed' must have class/struct/union
1>.winutil.cpp(2106) : error C2228: left of '.peRed' must have class/struct/union
1>.winutil.cpp(2107) : error C2228: left of '.peGreen' must have class/struct/union
1>.winutil.cpp(2107) : error C2228: left of '.peGreen' must have class/struct/union
1>.winutil.cpp(2108) : error C2228: left of '.peBlue' must have class/struct/union
1>.winutil.cpp(2108) : error C2228: left of '.peBlue' must have class/struct/union
1>.winutil.cpp(2124) : error C2228: left of '.peFlags' must have class/struct/union
1>outputq.cpp
1>.outputq.cpp(664) : error C2065: 'iDone' : undeclared identifier
1>Generating Code...
1>Build log was saved at "
file://d:DXSDKSamplesC++DirectShowBaseClassesDebug_UnicodeBuildLog.htm
"
1>BaseClasses - 9 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
錯(cuò)誤少了一個(gè)哦!繼續(xù)努力!雙擊1>.winutil.cpp(2104) : error C2065: 'Count' : undeclared identifier跳到出錯(cuò)位置。
你會(huì)見(jiàn)到出錯(cuò)語(yǔ)句:for (Count = 0;Count ------ Build started: Project: BaseClasses, Configuration: Debug Unicode Win32 ------
1>Compiling...
1>winutil.cpp
1>outputq.cpp
1>.outputq.cpp(664) : error C2065: 'iDone' : undeclared identifier
1>Generating Code...
1>Build log was saved at "
file://d:DXSDKSamplesC++DirectShowBaseClassesDebug_UnicodeBuildLog.htm
"
1>BaseClasses - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
不錯(cuò)哦!錯(cuò)誤剩下一個(gè)了!再改,雙擊1>.outputq.cpp(664) : error C2065: 'iDone' : undeclared identifier
跳到出錯(cuò)位置。
你會(huì)見(jiàn)到出錯(cuò)語(yǔ)句:*nSamplesProcessed = iDone - iLost;
iDone沒(méi)有定義?OK,繼續(xù)看它上面的語(yǔ)句:
// Loop processing the samples in batches
LONG iLost = 0;
for (long iDone = 0;
iDone ------ Build started: Project: BaseClasses, Configuration: Debug Unicode Win32 ------
1>Compiling...
1>outputq.cpp
1>Creating library...
1>Build log was saved at "
file://d:DXSDKSamplesC++DirectShowBaseClassesDebug_UnicodeBuildLog.htm
"
1>BaseClasses - 0 error(s), 0 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
總算見(jiàn)到succeeded了,呵呵!你調(diào)出來(lái)了嗎?
![]()
接著,生成所需要的那幾個(gè)庫(kù)文件,步驟如下:
單擊VS2005菜單欄中的Build-->Batch Build-->單擊彈出的Batch Build對(duì)話(huà)框中的Select All按鈕-->單擊Build按鈕。生成我們編程所需要的那兩個(gè)庫(kù)文件:strbase.lib和strmbase.lib。
[3] 將DirectX SDK的Include和Lib目錄配置到VS2005的系統(tǒng)目錄中去,并且放在標(biāo)準(zhǔn)的VS2005目錄之前。步驟如下:
單擊VS2005菜單欄上的Option(選項(xiàng))-->單擊彈出的Option對(duì)話(huà)框中Projects and Solutions前的加號(hào)將其展開(kāi)-->單擊VC++ Directories-->
(1) 在show directories for下拉列表中選中Include files,然后添加下列路徑:
D:DXSDKInclude
D:DXSDKSAMPLESC++DIRECTSHOWBASECLASSES
D:DXSDKSAMPLESC++COMMONINCLUDE
(2) 在show directories for下拉列表中選中library files,然后添加下列路徑:
D:DXSDKLib
D:DXSDKSamplesC++DirectShowBaseClassesDebug
D:DXSDKSamplesC++DirectShowBaseClassesDebug_Unicode
D:DXSDKSamplesC++DirectShowBaseClassesRelease
D:DXSDKSamplesC++DirectShowBaseClassesRelease_Unicode
路徑添加完成以后,別忘了點(diǎn)確定哦!
![]()
[4] 這一步只是簡(jiǎn)單的介紹一下編程時(shí)需要附加什么樣的庫(kù)文件及如何添加。
DirectShow應(yīng)用程序應(yīng)該至少連接庫(kù)文件strmiids.lib和quartz.lib。前者定義了DirectShow標(biāo)準(zhǔn)的CLSID和IID,后者定義了導(dǎo)出函數(shù)AMGetErrorText(如果應(yīng)用程序中沒(méi)有使用到這個(gè)函數(shù),也可以不連接這個(gè)庫(kù))。
如果程序里包含了頭文件streams.h,則一般庫(kù)文件還要連接strmbasd.lib、uuid.lib、winmm.lib。
如果你不知道怎樣附加庫(kù)文件的話(huà),可以試下下述的步驟:
(1) 首先你得新建或打開(kāi)一個(gè)解決方案。
(2) 單擊VS2005菜單欄中的Project-->XXX Properties-->彈出屬性設(shè)置對(duì)話(huà)框,展開(kāi)Configuration Properties-->展開(kāi)Linker-->單擊Input-->在右邊的Addtional Dependencies中添加庫(kù)。在每個(gè)庫(kù)文件中以空格間隔。
例如:strbase.lib strmiids.lib
[5] 全部搞定了之后,你就可以放心的寫(xiě)程序,調(diào)試程序了。加油哦!
本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u1/33950/showart_716130.html |
|