0

その質問があまり意味をなさない場合は申し訳ありません。Hello World シェル拡張ハンドラを作成しようとしています。私はこのチュートリアルに従っています。

シェル拡張ハンドラーは、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 &'

しかし、チュートリアル (私が投稿した最初のリンク) のどこにも、コンストラクターをオーバーライドする必要がある (またはその方法) とは書かれていないので、迷ってしまいます。

ここまでの私の完全なコードは次のとおりです。

4

1 に答える 1