CoCreateInstance 返回 E_INVALIDARG

Posted

技术标签:

【中文标题】CoCreateInstance 返回 E_INVALIDARG【英文标题】:CoCreateInstance Returning E_INVALIDARG 【发布时间】:2014-09-04 14:20:34 【问题描述】:

我在这里尝试做的只是创建一个接口的实例。真的应该这么简单。一直关注任何在线资料,阅读我能找到但终生无法解决此问题的资料。

归结为从 CoCreateInstance 返回的 HRESULT 是 E_INVALIDARG。我已经尽可能多地更改了参数以尝试使其工作,但仍然无法获得它。所以请看一眼,希望有人能指出我正在寻找的一些简单的东西。

//Instantiate the sink class and hold a pointer to it.
    m_pSink = new CSink();

    HRESULT hr = CoInitialize(NULL);

    //Get a pointer to sinks IUnknown, no AddRef. CMySink implements only
    //dispinterface and the IUnknown and IDispatch pointers will be same.
    LPUNKNOWN pUnkSink = m_pSink->GetIDispatch(FALSE); 

    CLSID clsidInterface;
    hr = CLSIDFromProgID(L"Automation.AutomationInterface", &clsidInterface);

    ICALib::IAutomationInterface *p_Interface = NULL;
    hr = CoCreateInstance(clsidInterface, NULL, CLSCTX_LOCAL_SERVER, ICALib::IID_IAutomationInterface, (void**)p_Interface);

    if (hr != S_OK) // Show a message box if the Instance of the interface is not created and do not create the object.
    
        CMessageBox(CMessageBox::WARNING_OK).Show(IDS_WARNING_BADLICENSE);
        m_failedToCreate = TRUE;
        this->~CMainClass();
        return;
    

    //Establish a connection between source and sink.
    //m_pUnkSrc is IUnknown of server obtained by CoCreateInstance().
    //m_dwCookie is a cookie identifying the connection, and is needed to terminate the connection.
    BOOL result = AfxConnectionAdvise(p_Interface, m_pSink->GetGUID(), pUnkSink, FALSE, &m_dwCookie);

(由于法律责任,本代码中未显示实际名称)

【问题讨论】:

OT,但this->~CMainClass(); 相当可疑 【参考方案1】:

您需要获取p_Interface 的地址并将其传递给CoCreateInstance。实际上,您只是为最后一个参数传递了一个 NULL 指针。

【讨论】:

天哪,我不敢相信我错过了这个,非常感谢:D 为避免此类错误,请考虑使用IID_PPV_ARGS 宏

以上是关于CoCreateInstance 返回 E_INVALIDARG的主要内容,如果未能解决你的问题,请参考以下文章

即使找到接口,CoCreateInstance 也会返回 E_NOINTERFACE

确认注册的 COM 对象 CoCreateInstance 返回 REGDB_E_CLASSNOTREG

COM笔记-CoCreateInstance

为啥 Avira 将“CoCreateInstance()”函数视为恶意软件?

在 VS 2012 中调用 CoCreateInstance 期间符号加载缓慢

关于 CoCreateInstance() 方法实现的问题