hr = m_pDisp->Invoke(
m_DispId,
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,
&m_DispParams, NULL, NULL, NULL);
Проблема с COM интерфейсом
Код:
Причём не в первом вызове этой функции, а во втором.
При первом вызове выполняется такой код:
Код:
bs = m_strFileName.AllocSysString();
m_DispParams.rgvarg[0].vt = VT_BSTR;
m_DispParams.rgvarg[0].bstrVal = bs;
m_DispParams.cArgs = 1;
m_DispParams.cNamedArgs = 0;
if (FAILED(Invoke()))
{
m_iErr = STAADImpExpData::eOpenStaadFunctionError;
SysFreeString(bs);
return;
}
SysFreeString(bs);
m_DispParams.rgvarg[0].vt = VT_BSTR;
m_DispParams.rgvarg[0].bstrVal = bs;
m_DispParams.cArgs = 1;
m_DispParams.cNamedArgs = 0;
if (FAILED(Invoke()))
{
m_iErr = STAADImpExpData::eOpenStaadFunctionError;
SysFreeString(bs);
return;
}
SysFreeString(bs);
где
Код:
HRESULT OpenStaad::Invoke()
{
HRESULT hr = DISP_E_EXCEPTION;
try {
hr = m_pDisp->Invoke(
m_DispId,
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,
&m_DispParams, NULL, NULL, NULL);
return hr;
} catch (...)
{
return hr;
}
}
{
HRESULT hr = DISP_E_EXCEPTION;
try {
hr = m_pDisp->Invoke(
m_DispId,
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,
&m_DispParams, NULL, NULL, NULL);
return hr;
} catch (...)
{
return hr;
}
}
В чём тут может быть проблема?
и AllocSysString() второй раз не вызывается,
то после первого раза вызывается SysFreeString(bs), и во второй раз m_DispParams показывает непонятно куда...