Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с COM интерфейсом

1.8K
17 апреля 2008 года
Nadezda
62 / / 31.05.2004
Песле перехода программы на UNICODE, она начала ломаться на функции

 
Код:
hr = m_pDisp->Invoke(
              m_DispId,
              IID_NULL,
              LOCALE_SYSTEM_DEFAULT,
              DISPATCH_METHOD,
              &m_DispParams, NULL, NULL, NULL);


Причём не в первом вызове этой функции, а во втором.
При первом вызове выполняется такой код:

Код:
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);

где
Код:
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;
   }
}

В чём тут может быть проблема?
17K
24 апреля 2008 года
HookEst
144 / / 27.03.2008
если во втором вызове используется тот же m_DispParams
и AllocSysString() второй раз не вызывается,
то после первого раза вызывается SysFreeString(bs), и во второй раз m_DispParams показывает непонятно куда...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог