AccessViolationException при вызове функции put_ClassName - PullRequest
0 голосов
/ 17 августа 2011

Я пытаюсь использовать предопределенную функцию, но получаю исключение AccessViolationException. Я также использую com-объекты. Я вызываю функцию put_ClassName (BSTR obj), но продолжаю получать исключение.

Возможно, это глупая ошибка, но вот пример:

IUIAutomationProxyFactory* factory;
IUIAutomationProxyFactoryEntry* entry;
IUIAutomationProxyFactoryMapping* pMap;
LPCWSTR className = L"CustomUIAutomationCPP";
BSTR name;

CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_CUIAutomation, NULL, CLSCTX_ALL, IID_IUIAutomation, (void**)&pAutomation);
(*pAutomation).get_ProxyFactoryMapping(&pMap);
factory = new CustomProxyFactory();
(*pAutomation).CreateProxyFactoryEntry(factory, &entry);

name = SysAllocString(className);
(*entry).put_ClassName(className);

Понятия не имею, почему я получаю эту ошибку. Любая помощь очень ценится.

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

Кажется, я не получаю сопоставление с таблицей прокси с помощью приведенного выше вызова:

(*pAutomation).get_ProxyFactoryMapping(&pMap);

Может кто-нибудь сказать мне, если есть другой способ получить отображение таблицы ??

Ответы [ 2 ]

0 голосов
/ 17 августа 2011

Как я и думал, произошла глупая ошибка с используемым мной clsid, и теперь я могу сделать запись в таблице прокси.

На данный момент мне интересно, когда я предполагаю создавать экземпляры моего серверного провайдера и моего клиентского провайдера. Кроме того, должны ли они существовать на протяжении всей жизни программы, так как я хотел бы получать события из моего пользовательского шаблона. Еще одна вещь, как добавить мой пользовательский шаблон в элементы автоматизации, чтобы элементы могли генерировать мои события из моего пользовательского шаблона.

0 голосов
/ 17 августа 2011

Вы ничего не вводили для ввода, сейчас это просто неинициализированный указатель.

...