有一个旧项目我需要重新编译到XE5,试图避免原始D7组件带来的奇怪的Twebbrowser错误。下面的代码在D7上很有用,但在XE5上却没有。
function GetFrame(FrameNo: Integer; WB: TWEbbrowser): IWebbrowser2;
var
OleContainer: IOleContainer;
enum: IEnumUnknown;
unk: IUnknown;
Fetched: PLongint;
begin
while WB.ReadyState <> READYSTATE_COMPLETE do
Application.ProcessMessages;
if Assigned(WB.document) then
begin
Fetched := nil;
OleContainer := WB.Document as IOleContainer;
OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
Enum.Skip(FrameNo);
Enum.Next(1, Unk, Fetched);
Result := Unk as IWebbrowser2;
end
else
Result := nil;
end;
我已经检查过,两个版本的EnumObjects参数相同,但XE5表示“E2033。实际和正式var参数的类型必须相同”。 知道如何重新编译这只小狗吗?谢谢。和平!
答案 0 :(得分:4)
对于变量参数,实际参数必须是形式参数的确切类型。
如果你得到错误,我可以假设你的枚举变量的类型不是类型:ActiveX.IEnumUnknown
,所以你可以尝试在变量声明部分中更改这一行:
enum: IEnumUnknown;
到:
enum: ActiveX.IEnumUnknown;