CoCreateInstance, возвращающий E_INVALIDARG

То, что я пытаюсь сделать здесь, это просто создать экземпляр интерфейса. На самом деле должно быть так просто. Следил за любыми онлайн-материалами и материалами для чтения, которые я могу найти и не могу решить эту проблему на всю жизнь.

Все сводится к HRESULT, который возвращается из CoCreateInstance как 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);

(Фактические имена не показаны в этом коде из-за юридических обязательств)

1

Решение

Вам нужно взять адрес p_Interface и передать это CoCreateInstance, На самом деле вы просто передаете нулевой указатель на последний аргумент.

2

Другие решения