2013-08-16 7 views
0

Я хочу получить доступ к объекту CUIAutomation через Ruby. OLE просмотра/COM объект сообщает следующие подробности:Как вы используете WIN32OLE ruby, чтобы получить экземпляр интерфейса «IDispatch»?

[ 
    uuid(FF48DBA4-60EF-4201-AA87-54103EEF594E), 
    version(1.0), 
    helpstring("The Central Class for UIAutomation") 
] 
coclass CUIAutomation { 
    [default] interface IUIAutomation; 
}; 

Я попытался к нему доступ с помощью UUID

WIN32OLE.new('{FF48DBA4-60EF-4201-AA87-54103EEF594E}') 
WIN32OLERuntimeError: failed to create WIN32OLE object from `{FF48DBA4-60EF-4201-AA87-54103EEF594E}' 
    HRESULT error code:0x80004002 
     No such interface supported 

Глядя на реализацию WIN3OLE.new он пытается захватить интерфейс IDispatch, но терпит неудачу.

... 
/* get IDispatch interface */ 
hr = CoCreateInstance(&clsid, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, 
         &IID_IDispatch, &p); 
... 

В Microsoft examples коде используется интерфейс IID_IUIAutomation непосредственно

#include <uiautomation.h> 

// CoInitialize must be called before calling this function, and the 
// caller must release the returned pointer when finished with it. 
// 
HRESULT InitializeUIAutomation(IUIAutomation **ppAutomation) 
{ 
    return CoCreateInstance(CLSID_CUIAutomation, NULL, 
     CLSCTX_INPROC_SERVER, IID_IUIAutomation, 
     reinterpret_cast<void**>(ppAutomation)); 
} 

мне нужно исправить и восстановить Win32OLE делать? Как еще я могу получить экземпляр CUIAutomation?

+0

Кажется, я не первый человек, у которого возникла эта проблема https://www.ruby-forum.com/topic/217965 –

ответ

0

Короткий ответ - вы этого не делаете. Win32Ole требует возможностей, предоставляемых IDispatch. Если COM-объект не предоставляет доступ к IDispatch, он несовместим с Win32Ole. Единственный вариант - создать собственную оболочку IDispatch с использованием другого языка, например C/C++, а затем вы можете использовать его с помощью Win32Ole.

+0

Я быстро просмотрел https://github.com/djberg96/pr- win32ole. Я считаю, что могу использовать это, чтобы реализовать что-то, что вызывает открытый интерфейс. –

 Смежные вопросы

  • Нет связанных вопросов^_^