2011年4月19日 星期二

Building DMODemo

今天試著要build一個directshow的範例DMODemo結果卻跑出下面的error

C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\objidl.h(11280): error C2061: syntax error : identifier '__RPC__out_xcount_part'

一開始以為是用錯SDK的library,因此我把Platform設定改為Windows7.1SDK。不幸的是錯誤依舊。


__RPC__out_xcount_part 是定義在 rpcsal.h 之中,我試著檢查SDK v7.0A與v7.1目錄下的rpcsal.h,確定這2個.h檔都有定義__RPC__out_xcount_part,很明顯的是include到錯誤的目錄。當一個人的電腦灌了好幾種編譯器與SDK這個問題是常常發生的。

進一步磁碟搜尋後在另外2個目錄下發現rpcsal.h檔,分別是在 C:\Program Files\Microsoft DirectX SDK (June 2010)\Include 與 C:\Program Files\Microsoft DirectX SDK (November 2007)\Include 之中。


答案已呼之欲出,DirectX SDK (November 2007)下的rpcsal.h未定義__RPC__out_xcount_part,罪人就是這個檔案。

修改的方式有2種,第一種比較簡單:把專案中[Property Pages] → [Configuration Properties] → [C/C++] → [General] → [Additional Include Directory]原本的設定$(DXSDK_DIR)Include刪除。

或是修改系統的DXSDK_DIR路徑為
C:\Program Files\Microsoft DirectX SDK (June 2010)\Include\

第2種作法比較一勞永役,但系統必需重開才能生效,不過如果你希望預設的DX版本為2007 Nov版的話,就只能採用第一種改法。

2011年4月13日 星期三

iota 不是 itoa

今天在看C9的 Standard Template Library (STL), 7 of n 時看到一個蠻有趣的東西 ─ iota(唸i.o.ta,我可沒拼錯字喔)。這個STL algorithm連VS 2010的Help也查不出來,但實際上是有功能的。此函式可以產生遞增的連續資料。

如:

iota(v.begin(),v.end(),0);

結果會產生出,0, 1, 2, 3, ...的數字。

如果是改為

iota(v.begin(),v.end(),7);


結果會產生出,7, 8, 9, 10, ...的數字。

這功能還蠻有用的。特別是對於初始化如調色盤這類型的東西。