MSAA Automation get_accChildCount для инфраструктуры UltraWinTree работает только при работе под CLR

Я недавно задал следующий вопрос MSAA UI Automation get_accChildCount неправильно возвращает 0 для инфраструктуры UltraTree в Winforms и нашел неудовлетворительный ответ, который является причиной для того, чтобы задать этот вопрос.

Вот ситуация:

Процесс 1: приложение C # / WinForms, показывающее окно пользовательского интерфейса с Infragistics UltraWinTree, имеющее дескриптор со значением «hwnd».

Процесс 2: код C ++, который извлекает число доступных дочерних элементов UltraWinTree с дескриптором со значением «hwnd», используя следующий код C ++ для вызова MSAA

IAccessible* accessibleObj;
AccessibleObjectFromWindow(hwnd, OBJID_CLIENT, IID_IAccessible, (void**)&accessibleObj);
long childCount;
accessibleObj->get_accChildCount(&childCount);

Если процесс 2 построен с использованием компилятора Microsoft C ++ с указанным флагом компилятора / clr (который компилирует код в .NET MSIL вместо сборки), childCount является правильным числом. Если он построен без установленного флага компилятора / clr, childCount является неправильным номером и вставляет вызов в GetLastError после звонка AccessibleObjectFromWindow возвращает 2 (которое выглядит как «Файл не найден»).

Почему этот код C ++ работает, только если указан флаг / clr для компилятора?

РЕДАКТИРОВАТЬ

Чтобы быть действительно точным в ответе, который я ищу, моя основная цель — заставить этот код работать на C ++. Поэтому, если есть какой-то способ заставить этот код C ++ работать без использования параметра / clr в компиляторе Microsoft C ++, это будет приемлемым ответом.

Мне бы очень хотелось узнать, почему он волшебным образом работает, если включить и флаг / clr, но это не обязательно для принятия ответа. Если вы можете сделать и то и другое, вы получите мою глубочайшую благодарность 🙂

1

Решение

Задача ещё не решена.

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

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