描述:
最近学习Shell Extension,在CodeProject上找到Michael Dunn的经典教程《The Complete Idiot's Guide to Writing Shell Extensions》。原文见http://www.codeproject.com/shell/shellextguide1.asp
但是在编译(使用vc7.1)教程附带的源文件的时候总出现编译错误:
error C2787: “IContextMenu” : 没有与该对象关联的 GUID
error C2440: “初始化” : 无法从“DWORD_PTR”转换为“const IID *”
从整型转换为指针类型要求 reinterpret_cast、C 样式转换或函数样式转换
error C2440: “初始化” : 无法从“ATL::_ATL_CREATORARGFUNC (__stdcall *)”转换为“DWORD_PTR”
该转换要求 reinterpret_cast、C 样式转换或函数类型转换
相关代码如下:
class ATL_NO_VTABLE CSimpleShlExt :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSimpleShlExt, &CLSID_SimpleShlExt>,
public IDispatchImpl<ISimpleShlExt, &IID_ISimpleShlExt, &LIBID_SimpleExtLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IShellExtInit,
public IContextMenu
{
public:
CSimpleShlExt()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_SIMPLESHLEXT)
BEGIN_COM_MAP(CSimpleShlExt)
COM_INTERFACE_ENTRY(ISimpleShlExt)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IShellExtInit)
COM_INTERFACE_ENTRY(IContextMenu)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
};
OBJECT_ENTRY_AUTO(__uuidof(SimpleShlExt), CSimpleShlExt)
为何IShellExtInit又不出错呢?改如何解决这个问题?请各位大侠多多指教!!
解决方案1:
#include <shlobj.h>