DllGetClassObject 应该对其 Shell 扩展处理程序的构造函数进行什么参数?



抱歉,如果这个问题不是很有意义。我正试图使一个你好世界外壳扩展处理程序。我一直在遵循这个教程。

它说Shell扩展处理程序必须实现未知接口和类工厂,我已经完成了。

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 &'

但是在教程(我发布的第一个链接)中没有任何地方说你必须(或如何)重写构造函数,所以我迷路了。

这是我到目前为止的完整代码

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

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

编写Shell扩展的完整指南-第一部分

如何在c++中编写一个shell扩展?

最新更新