2014-09-12 3 views
0

URL 바에서 값을 가져올 것을 약속하는 코드에서 작업하고 있지만 이제 IAccessible get_accValue 속성의 일부 매개 변수에 컴파일 오류가 하나 나타납니다. 그래서, 어떻게 고쳐?IAccessible : 어떻게 Mozilla Firefox에서 URL 표시 줄의 가치를 얻습니까?

도움이 될 것입니다!

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

당신은 PWChar을 통과하려고 :

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가 아닙니다. THandle (0) 대신 0을 전달하십시오. –

+0

그리고 우리는 PWChar가 무엇인지 알지 못합니다. –

+0

@David Heffernan, 여기에 반환 된 erro => http://prntscr.com/4m8l35 – GREATVIEW

답변

0

당신이 oleacc.IAccessible.get_accValue()에 대한 선언을 보면, 당신이 오류가 발생하는 이유는 분명하다 : 여기

은 내 코드입니다 여기서 out WideString이 예상됩니다. 델파이는 varout 매개 변수에 대해서는 매우 엄격합니다.

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를 사용, 델파이 WideString와 랩 :

당신은 당신의 pw 변수를 변경해야합니다. COM 인터페이스에서 문자열을 전달할 때 항상 WideString을 사용하십시오.

+0

@Ramy Lebeau, 올바르게 컴파일되었습니다! 하지만 함수 ffurl 반환 빈 :(,하지만 당신을 도와 줘서 고마워! – GREATVIEW