gpt4 book ai didi

delphi - 如何访问后期绑定(bind)的嵌套属性和方法?

转载 作者:行者123 更新时间:2023-12-02 08:20:57 25 4
gpt4 key购买 nike

我想知道当要访问的属性嵌套在另一个属性中时,从 Delphi 访问后期绑定(bind)属性或方法的正确方法是什么。让我解释一下。

检查此示例应用程序以检查防火墙是否处于事件状态,声明的 3 个函数使用 HNetCfg.FwMgr COM 对象并返回相同的值。

{$APPTYPE CONSOLE}

uses
Variants,
ActiveX,
Comobj,
SysUtils;

//in this function i don't use any "helper" property to hold the temp value of the properties.
function FirewallIsActive1 : Boolean;
var
Firewall : OleVariant;
begin
Firewall := CreateOleObject('HNetCfg.FwMgr');
Result := Firewall.LocalPolicy.CurrentProfile.FirewallEnabled;
end;


//here i hold the value of the LocalPolicy property
function FirewallIsActive2 : Boolean;
var
Firewall : OleVariant;
Policy : OleVariant;
begin
Firewall := CreateOleObject('HNetCfg.FwMgr');
Policy := Firewall.LocalPolicy;
Result := Policy.CurrentProfile.FirewallEnabled;
end;


//Here i use a "helper" variable for each property
function FirewallIsActive3 : Boolean;
var
Firewall : OleVariant;
Policy : OleVariant;
Profile : OleVariant;
begin
Firewall := CreateOleObject('HNetCfg.FwMgr');
Policy := Firewall.LocalPolicy;
Profile := Policy.CurrentProfile;
Result := Profile.FirewallEnabled;
end;


var
i : Integer;
begin
try
CoInitialize(nil);
try
Writeln(BoolToStr(FirewallIsActive1,True));
Writeln(BoolToStr(FirewallIsActive2,True));
Writeln(BoolToStr(FirewallIsActive3,True));
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
begin
Writeln(E.Classname, ':', E.Message);
Readln;
end;
end;
end.

我问这个问题是因为我想知道Delphi编译器是否能够生成代码来处理这3个函数的任何情况下的olevariants?

最佳答案

Delphi 不会生成任何其他变体,因此释放它们不会有任何问题。 Delphi 将仅遍历 IDispatch 路由以获取 FirewallIsActive1 中的值。

如果您只需要一个值,我会更喜欢这个。如果您需要嵌套接口(interface)的多个信息,我会将其存储在辅助变体中。

关于delphi - 如何访问后期绑定(bind)的嵌套属性和方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5681897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com