2010年9月2日 星期四

安裝DirectShow開發工具

如果你使用的工具是Visual Studio 2010或之後的版本,建議使用Windows SDK 7.0以後的版本。DirectShow目前已整合在SDK中,不像以前是DirectX的擴充元件。

微軟的版本可能會持續更新,在寫這篇文章時我所使用的是

Microsoft Windows SDK for Windows 7 and .NET Framework 4

依預設的下載安裝完成後,可以在

C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow

找到DirectShow的範例程式。

完成安裝後的第一件事是建立BaseClasses Library,這個Library是以後要使用DirectShow時都會使用到的程式庫,裡面有許多已包裝好的類別可加速程式的開發。BaseClasses應該是安裝在

C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses

可依以下方法建立

1. 使用Visual Studio 2010開啟baseclasses.vcproj專案。

2. 確認後會出現專案轉換精靈協助我們把專案轉為Visual Studio 2010的格式。

3. baseclasses包含有4種不同的設定,分別為:Debug、Debug_MBCS、Release、Release_MBCS。

Debug / Release與Debug_MBCS / Release_MBCS的差別在一個使用Unicode別一個使用Multi-Byte。我較習慣使用Multi-Byte,所以將建置Debug_MBCS與Release_MBCS版本。
以前我使用Visual Studio 2005建立64-bit程式時發現,使用Unicode建立的程式在XP-64系統上執行都會出現模組錯誤的訊息無法執行,所以我會很習慣的都把專案改為Multi-Byte。
4. 選擇Debug_MBCS後執行[Build Solution]

理論上會出現2個編號 MSB8012的warning

這是因為VS2010的project proterty新增了TargetName的欄位,我嘗試用以下方式修正:

a. 從選單的[Project] -> [Properties]開啟properties視窗
b. 在[Configuration Properties] -> [General]中找到[Target Name]欄位
c. 將[Target Name]欄位中原本的$(ProjectName)改為strmbasd
d. 確定後重新執行[Build Solution]。

5. 改成Release_MBCS後依上面步驟,但將[Target Name]設為strmbase後執行[Build Solution]。

6. 你可以在專案的目錄下找到Debug_MBCS與Release_MBCS,而建立好的strmbasd.lib與strmbase.lib檔就放在其中。要特別注意,當連結使用DirectShow的baseclasses時是有分Debug與Release模式,若使用的是Debug設定,需連結strmbasd.lib反之使用strmbase.lib才能避免許多錯誤。


我在做完BaseClasses後通常會做2個步驟方便日後使用。

首先,我會把strmbasd.lib與strmbase.lib複製到C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib目錄下。

其次,我會在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include目錄下建立directshow\baseclasses子目錄,並且把baseclasses中所有的Header Files都複製到此目錄下。

會這麼做而不是直接連結到專案目錄,是因為我有時會追蹤baseclasses的一些行為而加入一些程式碼,為避免不穩定的情形所以把最原使可運作的Library與Header Files保持在v7.0A的子錄目下。正常情況下都會連結此目錄下的版本來使用。


如果使用的是Visual Studio 2005建議使用DirectX 9.0c加上DirectX Extras來開發DirectShow。

DirectX 9.0 SDK Update - (Summer 2004)
DirectX 9.0 SDK Update (February 2005) Extras

沒有留言:

張貼留言