Использование COM-методов в консольном приложении

я сделал консольное приложение win32, которое импортирует файл .ocx из geovision SDK. Я нашел правильный CLSID и идентификатор интерфейса COM-компонентов в сгенерированных заголовках «.tli» и «.tlh», и все работает, пока я не вызову какой-либо метод (например, Login2 в моем коде ниже). Затем происходит _com_exception, и он не дает подробной информации о том, что именно происходит.

Кто-нибудь может дать мне подсказку, что мне делать дальше или где мне искать решение? Мне потребовалось больше недели, чтобы достичь этой точки использования COM-компонентов в консольном приложении … Я надеюсь, что это возможно.

#include "stdafx.h"#include "stdio.h"
#import "C:\Windows\GeoOCX\SinglePlayer\20121003\GVSinglePlayer.ocx" \
named_guids no_namespace no_smart_pointers

int _tmain(int argc, _TCHAR* argv[])
{
try
{
CoInitialize(NULL);
_DGVSinglePlayer* pSP = 0;
HRESULT hr = CoCreateInstance(CLSID_GVSinglePlayer  ,NULL, CLSCTX_INPROC_SERVER,DIID__DGVSinglePlayer,reinterpret_cast  <void**>(&pSP));

_bstr_t lpIPAddress("11.11.11.11");
long iPort=10000;
_bstr_t lpUserID("abcde");
_bstr_t lpPassword("password");

if ( SUCCEEDED ( hr ) )
{
hr = pSP->Login2(lpIPAddress,iPort,lpUserID,lpPassword );
if ( SUCCEEDED ( hr ) )
{
printf("Cool");
}
}else
{
}
pSP->Release();
CoUninitialize();

} catch (_com_error& e)
{
char buf[80];
sprintf(buf, "Error: %S",e.Description());
printf("%s\n",buf);
}

return 0;
}

Поскольку e.Description () не печатает никакой информации, я добавил визуальную информацию об ошибке.

Сообщения об ошибках

1

Решение

Многие элементы управления ActiveX хотят быть правильно размещены (то есть, хост реализует IOleClientSite и связанные интерфейсы, и передает указатель на элемент управления IOleObject::SetClientSite). Такие элементы управления возвращают E_UNEXPECTED для всех вызовов метода, пока не будет выполнен танец активации OLE.

В частности, элементы управления ActiveX, разработанные с помощью MFC, обычно ведут себя так; поведение запекается в рамках MFC.

Я подозреваю, что ваш контроль может быть одним из них. В этом случае вы не сможете легко использовать его в консольном приложении. Вам понадобится оконное приложение, использующее среду, которая реализует хостинг ActiveX (MFC, ATL, WinForms; другие, вероятно, существуют, с которыми я не знаком).

2

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

Других решений пока нет …

По вопросам рекламы [email protected]