Delphi IAccessible:如何在Mozilla Firefox中获取url栏的值?
我使用的代码承诺从url栏获取值,但现在在IAccessible get_accValue属性的某些参数中出现一个编译错误。那么,如何修复 任何帮助都将不胜感激 以下是我的代码:Delphi IAccessible:如何在Mozilla Firefox中获取url栏的值?,delphi,delphi-xe6,Delphi,Delphi Xe6,我使用的代码承诺从url栏获取值,但现在在IAccessible get_accValue属性的某些参数中出现一个编译错误。那么,如何修复 任何帮助都将不胜感激 以下是我的代码: uses oleacc; function ffdoc: THandle; const A_szClassName: array[0..6] of PChar = ('MozillaUIWindowClass','MozillaWindowClass', 'MozillaWindowClass','Moz
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;
如果查看
oleacc.IAccessible.get\u accValue()
的声明,很明显会出现错误的原因:
function Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; stdcall;
您正试图传递一个PWChar
,其中需要一个输出宽字符串。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
包装。因此,在COM接口内外传递字符串时,始终使用WideString
。缺少错误检查不是好兆头。如果编译器给出错误消息,请告诉我们它是什么。唐德尔不是一个HWND。传递0而不是THandle(0)。我们不知道PWChar是什么。@David Heffernan,这是返回的erro=>否。请将其作为文本包含在问题中。您需要阅读编译器消息,然后查看您传递的参数的类型和函数参数的类型。第二个参数应该在WideString之外。@Ramy Lebeau,现在编译正确了!但是函数ffurl返回空:(,但是谢谢你的帮助!