2013-05-24 3 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); 
} 

정확한 오류는 다음과 같습니다 튜토리얼 (I 게시 첫 번째 링크)는 당신이 가지고 말하는가에

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

그러나 어디 (또는 방법) 그래서 내가 잃어버린하고 생성자보다 우선합니다.

Here이 시점까지 나의 완전한 코드입니다.

+0

먼저이, 셸 확장되지 않습니다. 두 번째 어디에서 생성자가 선언 되었습니까? – Xearinox

답변

1

클래스에 암시 적으로 사용되는 생성자가 누락 된 것으로 보입니다. 여하튼, 당신은 긴 여행을 가고있다. 셸 확장은 COM 개체이므로 COM을 이해해야하며 작성할 때 어려울 수도 있습니다. COM을 작성하는 좋은 방법 중 하나는 Visual Studio에서 Microsoft에서 제공하는 ATL 라이브러리를 사용하는 것입니다.

난 당신이 모든에 좋은 자습서 및 기사를 읽으십시오 : 쉘 인터페이스를 사용하지 때문에

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

How to write a shell extension in C++?