调用函数put_ClassName时的AccessViolationException

时间:2011-08-16 20:27:24

标签: .net com c++-cli ui-automation

我正在尝试使用预定义的函数,但不断获得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 :(得分:0)

你没有任何东西进入,现在它只是一个未初始化的指针。

答案 1 :(得分:0)

正如我想的那样,我使用的clsid存在一个愚蠢的错误,现在我能够在代理表中创建一个条目。

此时,我想知道我什么时候想要实例化我的服务器端提供程序和我的客户端提供程序。此外,它是否应该在程序的生命周期中存在,因为我想从我的自定义模式中捕获事件。还有一件事,如何将自定义模式添加到自动化元素中,以便元素可以从我的自定义模式中抛出事件。