Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi IAccessible:如何在Mozilla Firefox中获取url栏的值?_Delphi_Delphi Xe6 - Fatal编程技术网

Delphi IAccessible:如何在Mozilla Firefox中获取url栏的值?

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

我使用的代码承诺从url栏获取值,但现在在IAccessible get_accValue属性的某些参数中出现一个编译错误。那么,如何修复

任何帮助都将不胜感激

以下是我的代码:

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返回空:(,但是谢谢你的帮助!