我想使用預定義的函數,但不斷得到一個AccessViolationException。我也使用com對象。我調用函數put_ClassName(BSTR obj),但不斷收到異常。AccessViolationException當調用函數put_ClassName
這可能是一個愚蠢的錯誤,但這裏是一個示例:
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);
誰能告訴我,如果有另一種方式來獲得表映射?
我編輯了上面的代碼以顯示我如何到達那一點。我相信CreateProxyFactoryEntry(...)實例化變量。 –
您是否在調試器/通過日誌中檢查過它是否真的被分配了?你可以顯示CreateProxyFactoryEntry的代碼嗎? – elevener
我已經檢查過調試器,並且條目似乎被分配給一個com對象(IUnknown)。該函數來自IUIAutomationProxyFactory :: CreateProxyFactoryEntry –