2017-01-04 125 views
0

嘗試編譯C++項目時,我收到與CLSID_PropertyChangeArray的定義相關的錯誤,它是listed on MSDN。我導入了所需的Propsys.h頭文件,但問題仍然存在。我繼續收到如下消息:未定義CLSID_PropertyChangeArray

propsys.obj : error LNK2001: unresolved external symbol CLSID_PropertyChangeArray 


propsys.cpp(610): error C2065: 'CLSID_PropertyChangeArray': undeclared identifier 

我這樣做是否錯誤?我不熟悉win32 C++,所以這是一個新手錯誤?

+2

有*不確定*和*懸而未決*符號之間有很大的區別。第一個是編譯器錯誤,第二個是鏈接器錯誤。你正在經歷第二次。 'CLSID'是一個包含多個整數的'struct'。 '.h'文件爲'CLSID_PropertyChangeArray'變量(即'extern const CLSID CLSID_PropertyChangeArray;')聲明一個'extern'語句,但是你需要在項目中添加一個'.lib'文件來定義實際的'CLSID_PropertyChangeArray'變量,或者直接在你的代碼中定義它(例如'const CLSID CLSID_PropertyChangeArray = {...};'),這樣鏈接器就可以找到它。 –

回答

0

真的這是我肯定的文檔中的錯誤。 CLSID_PropertyChangeArrayPropertyChangeArray未在任何SDK或WDK標頭中定義。只有一個辦法得到IPropertyChangeArray接口調用PSCreatePropertyChangeArray


如果快找PSCreatePropertyChangeArray - 這裏存在符號CLSID_PropertyChangeArray{8b6a3ebb-cd13-4704-93c5-bc3413104e4c}),但此功能不叫CoCreateInstance它,而是用內部實現。同時也是該類即使沒有註冊的 - 所以嘗試撥打CoCreateInstance{8b6a3ebb-cd13-4704-93c5-bc3413104e4c}回報REGDB_E_CLASSNOTREG錯誤

enter image description here

+0

@xaav - 如果你有* undefined *符號 - 最好的解決方案是在'SDK'(或'WDK','VC')*包含目錄*的文件管理器中搜索。如果這個符號是正確的並且被定義的 - 你找到了'.h'它放在哪裏 - 並且需要包含這個'.h'文件。如果你有*未解析*符號 - 也做搜索,但這次在* LIB *文件夾。這表示你從這個符號出口的位置(如果它必須被導出)以及哪個'.lib'需要包含*鏈接器*輸入。簡單的規則,但非常有幫助 – RbMm