2014-09-12 1 views
0

Я работаю в коде, который обещает получить значение из строки url, но теперь появляется одна ошибка компиляции в некоторых параметрах свойства IAccessible get_accValue. Итак, как исправить?IAccessible: Как получить значение строки url в Mozilla Firefox?

Любая помощь будет оценена!

Вот мой код:

uses 
    oleacc; 

function ffdoc: THandle; 
const 
    A_szClassName: array[0..6] of PChar = ('MozillaUIWindowClass','MozillaWindowClass', 
    'MozillaWindowClass','MozillaWindowClass','MozillaContentWindowClass', 
    'MozillaWindowClass','MozillaWindowClass'); 
var 
    i: Integer; 
begin 
    Result:= 0; 
    for i:= 0 to 6 do 
    Result:= FindWindowEx(Result,THandle(nil),A_szClassName[i],nil); 
end; 

function ffurl:string; 
var 
    acc: IAccessible; 
    pw: PWChar; 
begin 
    if AccessibleObjectFromWindow(ffdoc,OBJID_CLIENT,IID_IAccessible,Pointer(acc)) = 0 then 
    Acc.get_accValue(CHILDID_SELF,pw); 
    Result:= pw; 
end; 
+0

Отсутствие проверки ошибок не сулит ничего хорошего. Если компилятор дает сообщение об ошибке, сообщите нам, что это такое. THandle не является HWND. Передайте 0, а не THandle (0). –

+0

И мы не знаем, что такое PWChar. –

+0

@ Давид Хеффернан, здесь возвращается erro => http://prntscr.com/4m8l35 – GREATVIEW

ответ

0

Если посмотреть на декларации за oleacc.IAccessible.get_accValue(), то понятно, почему вы получаете ошибку:

function Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; stdcall; 

Вы пытаетесь передать PWChar где ожидается out WideString. Delphi очень строг, когда речь заходит о параметрах var и out.

Вы должны изменить pw переменную:

function ffurl:string; 
var 
    acc: IAccessible; 
    pw: WideString; 
begin 
    if AccessibleObjectFromWindow(ffdoc, OBJID_CLIENT, IID_IAccessible, acc) = 0 then 
    acc.get_accValue(CHILDID_SELF, pw); 
    Result := pw; 
end; 

COM использует BSTR для своих строк, которые Delphi обертку с WideString. Поэтому всегда используйте WideString при передаче строк в/из интерфейсов COM.

+0

@Ramy Lebeau, теперь правильно составлен! но функция ffurl возвращает пустую :(, но спасибо за помощь мне! – GREATVIEW