DllGetClassObject应该为它的Shell扩展处理程序的构造函数提供什么参数?

时间:2013-05-24 19:28:07

标签: winapi shell-extensions

很抱歉,如果这个问题没有多大意义。我正在尝试制作一个Hello World Shell扩展处理程序。我一直关注this教程。

它说Shell扩展处理程序必须实现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时,它说我向Shell扩展的构造函数提供了错误的参数。

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是我的完整代码。

1 个答案:

答案 0 :(得分:1)

您的类似乎缺少您隐式使用的构造函数。无论如何,你要去长途旅行。 Shell扩展是COM对象,因此您需要了解COM,并且它们也很难编写。编写COM的一种好方法是使用Microsoft提供的ATL库和Visual Studio。

我建议你阅读一些关于这一切的好教程和文章:

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

How to write a shell extension in C++?