2017-01-04 194 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