2013-05-24 2 views
0

Извините, если этот вопрос не имеет большого смысла. Я пытаюсь сделать Hello World Shell Extension Handler. Я следующие this учебник.Какой аргумент должен DllGetClassObject для конструктора его обработчика расширения оболочки?

В нем говорится, что обработчики расширения оболочки должны реализовывать интерфейс IUnknown и фабрику классов, которые я сделал.

class TestInterfaceImplementation : public IUnknown, public IClassFactory 
ULONG STDMETHODCALLTYPE AddRef() 
RESULT STDMETHODCALLTYPE QueryInterface(IN REFIID riid, OUT void **ppvObject) 
ULONG STDMETHODCALLTYPE Release() 
HRESULT STDMETHODCALLTYPE CreateInstance(IN IUnknown *pUnkOuter, IN REFIID riid, OUT void **ppvObject) 
HRESULT STDMETHODCALLTYPE LockServer(IN BOOL fLock) 

Но это все, что он говорит. Когда я перехожу к реализации DllGetClassObject, он говорит, что я предоставляю неправильный аргумент конструктору моего расширения оболочки.

HRESULT __stdcall DllGetClassObject(IN REFCLSID rclsid, IN REFIID riid, OUT LPVOID *ppv) { 
    TestInterfaceImplementation *tii = new TestInterfaceImplementation(rclsid); 
} 

Точная ошибка:

error C2664: 'TestInterfaceImplementation::TestInterfaceImplementation(const TestInterfaceImplementation &)' : cannot convert parameter 1 from 'const IID' to 'const TestInterfaceImplementation &' 

Но нигде в учебнике (первой ссылке, которую я разместил) это что у вас есть (или как) переопределить конструктор, так что я потерял.

Here - это мой полный код до этого момента.

+0

Во-первых, это не расширение оболочки, так как не использовать интерфейс оболочки. Во-вторых, где объявлен конструктор? – Xearinox

ответ

1

В вашем классе отсутствует конструктор, который неявно используется. В любом случае, вы отправляетесь в долгую поездку. Расширения оболочки являются COM-объектами, поэтому вам нужно понимать COM, и их также сложно записать. Один хороший способ написать COM - использовать библиотеку ATL, предоставляемую Microsoft с помощью Visual Studio.

Я предлагаю вам прочитать некоторые хорошие учебники и статьи обо всем этом:

The Complete Idiot's Guide to Writing Shell Extensions - Part I

How to write a shell extension in C++?

Смежные вопросы