Тема: Получение количества меню AutoCAD.

Пытаюсь получить количество меню AutoCAD:

IAcadApplication * pAcad;
IAcadMenuBar * pMenuBar;
HRESULT hr = S_OK;
LPDISPATCH pAcadDisp = NULL;
pAcadDisp = acedGetAcadWinApp()->GetIDispatch(TRUE);
pAcadDisp->QueryInterface(IID_IAcadApplication, (LPVOID*)&pAcad);
hr = pAcad->get_MenuBar(&pMenuBar);
//hr = S_OK
pAcad->Release();
long numberOfMenus;
pMenuBar->get_Count(&numberOfMenus);
//numberOfMenus == 0
pMenuBar->Release();
//exception

Количество меню не получаю, объект IAcadMenuBar ненулевой, но при релизе летит исключение.

Re: Получение количества меню AutoCAD.

Ты же сначала сделал pAcad->Release(); а потом пытаешься вытащить информацию из него. Попробуй так:

static long MenuBarCount(void)
{
  LPDISPATCH pDisp = acedGetAcadWinApp()->GetIDispatch(TRUE);
  if (!pDisp) return;
  IAcadApplication *acadApp = NULL;
  HRESULT hr = S_OK;
  hr = pDisp->QueryInterface(IID_IAcadApplication, (LPVOID*)&acadApp);
  if (FAILED(hr)) return 0;
  IAcadMenuBar *menuBar = NULL;
  hr = acadApp->get_MenuBar(&menuBar);
  if (FAILED(hr)) { acadApp->Release(); return 0; }
  long count = 0;
  hr = menuBar->get_Count(&count);
  menuBar->Release(); acadApp->Release();
  return count;
}

Re: Получение количества меню AutoCAD.

Упомянутое мной исключение при релизе IAcadMenuBar'a отсутствует, его нет. Смущает вставка меню не последним, а перед "Окна", Если вывести count через AfxMessageBox - получаю '.%3f"'.
Между делом релиз более неиспользуемых компонентов встречается в arxref.chm. Поведение программы при таком релизе не менялось.

Re: Получение количества меню AutoCAD.

Ни черта не понял. Так есть исключение или нет? Код, который я написал работает или нет?

Re: Получение количества меню AutoCAD.

P.S.: И как ты форматируешь строку перед выводом через AfxMessageBox()? Судя по всему у тебя формат не правильный. Должен быть "%d".

Re: Получение количества меню AutoCAD.

Исключения нет. Я не пояснил в прошлый раз: оно было, но в другом месте. Прошу простить :'(.
В AfxMessageBox() я передавал long не форматируя.

Re: Получение количества меню AutoCAD.

equilibrium пишет:

В AfxMessageBox() я передавал long не форматируя.

Ну ты даешь! Учи матчасть.