error LNK2001: unresolved external symbol _CLSID_
这个问题有多种可能,按顺序逐个说
1./mktyplib203 问题
在发布COM前编译MIDL时,如果没有用/mktyplib203选项,那么产生的.h中会是这样的
EXTERN_C
const IID IID_IXX
而其实际定义是在xxx_i.c中
MIDL_DEFINE_GUID
(IID
, IID_IXX...)
;
可见如果此时只包含.h必然导致LNK2001.需要同时把_i.c编译进来。不过我一向使用/mktyplib203,所以.h中会是这样的
DEFINE_GUID
(IID_IXXX
,
0xAxxx...)
;
那问题出在哪?
2.DEFINE_GUID 和INITGUID
其实看一下DEFINE_GUID的定义就明白了
#ifdef INITGUID
#define DEFINE_GUID
(name
, l
, w1
, w2
, b1
, b2
, b3
, b4
, b5
, b6
, b7
, b8
) \
EXTERN_C
const GUID DECLSPEC_SELECTANY name \
=
{ l
, w1
, w2
,
{ b1
, b2
, b3
, b4
, b5
, b6
, b7
, b8
}
}
#else
#define DEFINE_GUID
(name
, l
, w1
, w2
, b1
, b2
, b3
, b4
, b5
, b6
, b7
, b8
) \
EXTERN_C
const GUID FAR name
#endif
// INITGUID
很明显,没定义INITGUID时 DEFINE_GUID并不是一个真正的定义(Definition)而是一个声明(Declaration).所以加上INITGUID定义就可以了
#include
<initguid.h
>
同时应注意的是,增加#include