首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IAccessible:如何在Mozilla中获得url栏的价值?

IAccessible:如何在Mozilla中获得url栏的价值?
EN

Stack Overflow用户
提问于 2014-09-12 21:47:31
回答 1查看 725关注 0票数 0

我正在编写一段代码,该代码承诺从url栏中获取值,但现在在IAccessible get_accValue属性的某些参数中出现了一个编译错误。那怎么解决呢?

任何帮助都将不胜感激!

这是我的代码:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-12 22:53:39

如果您查看oleacc.IAccessible.get_accValue()的声明,很明显您得到错误的原因是:

代码语言:javascript
复制
function Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; stdcall;

您正在尝试传递一个PWChar,其中期望有一个out WideString。对于varout参数,Delphi非常严格。

您需要更改您的pw变量:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25817354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档