その質問があまり意味をなさない場合は申し訳ありません。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 &'
しかし、チュートリアル (私が投稿した最初のリンク) のどこにも、コンストラクターをオーバーライドする必要がある (またはその方法) とは書かれていないので、迷ってしまいます。
ここまでの私の完全なコードは次のとおりです。