Я использовал VS2015 и мастер проекта ATL для написания расширения оболочки Icon handler. Я создал COM-объект, чтобы выставить IPersist и Интерфейсы IExtractIcon. Я вижу, что обработчик зарегистрирован, когда я смотрю запись реестра для определенного типа файла. Вот что класс выглядит следующим образом:Расширение оболочки Icon Handler не называется
class ATL_NO_VTABLE CIconHandlerExt :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CIconHandlerExt, &CLSID_IconHandlerExt>,
public IIconHandlerExt,
public IPersistFile,
public IExtractIcon
{
public:
CIconHandlerExt()
{
}
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_ICONHANDLEREXT)
DECLARE_NOT_AGGREGATABLE(CIconHandlerExt)
BEGIN_COM_MAP(CIconHandlerExt)
COM_INTERFACE_ENTRY(IIconHandlerExt)
COM_INTERFACE_ENTRY(IPersistFile)
COM_INTERFACE_ENTRY(IExtractIcon)
END_COM_MAP()
// IIconHandlerExt
public:
// IExtractIcon
STDMETHODIMP GetIconLocation(UINT uFlags, LPTSTR szIconFile, UINT cchMax, int* piIndex, UINT* pwFlags);
STDMETHODIMP Extract(LPCTSTR pszFile, UINT nIconIndex, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize);
public:
// IPersistFile
//xxxSTDMETHOD(GetClassID)(CLSID*) { return E_NOTIMPL; }
STDMETHOD(GetClassID)(CLSID *pClsId) { *pClsId = CLSID_IconHandlerExt; return S_OK; }
STDMETHOD(IsDirty)() { return E_NOTIMPL; }
STDMETHOD(Save)(LPCOLESTR, BOOL) { return E_NOTIMPL; }
STDMETHOD(SaveCompleted)(LPCOLESTR) { return E_NOTIMPL; }
STDMETHOD(GetCurFile)(LPOLESTR*) { return E_NOTIMPL; }
STDMETHOD(Load)(LPCOLESTR wszFile, DWORD /*dwMode*/)
{
USES_CONVERSION;
lstrcpyn(m_szFilename, OLE2CT(wszFile), MAX_PATH);
return S_OK;
}
protected:
TCHAR m_szFilename[MAX_PATH]; // Full path to the file in question.
};
OBJECT_ENTRY_AUTO(__uuidof(IconHandlerExt), CIconHandlerExt)
Я использовал инструкцию this поста, чтобы начать сеанс отладки. А именно, я нажимаю на панель задач, нажимаю Alt-F4, нажимаю Ctrl-Alt-Shift-Escape и запускаю сеанс отладчика, который указывает проводник Windows в качестве целевой команды. Я установил точки останова и перейду к тестовому файлу.
Мой обработчик никогда не загружен, так как контрольные точки не хит, и они говорят
«Точка останова будет не в настоящее время будет хит. Никаких символов не было , загруженных для этого документа. "
Может ли кто-нибудь пролить свет на то, почему мое расширение не загружается?