我正在编写一段代码,该代码承诺从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;发布于 2014-09-12 22:53:39
如果您查看oleacc.IAccessible.get_accValue()的声明,很明显您得到错误的原因是:
function Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; stdcall;您正在尝试传递一个PWChar,其中期望有一个out WideString。对于var和out参数,Delphi非常严格。
您需要更改您的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。
https://stackoverflow.com/questions/25817354
复制相似问题