gpt4 book ai didi

perl - 如何在 Perl 中以编程方式发现 Win32::OLE 对象的属性和方法?

转载 作者:行者123 更新时间:2023-12-03 23:34:33 26 4
gpt4 key购买 nike

在 Perl 中,使用 Win32::OLE 非常容易。库来加载 COM/OLE 对象并控制它们。我遇到的问题是确切地知道我正在访问的对象中有哪些方法和属性可用。其他语言中的某些 OLE 工具包可以通过读取对象上可用的所有属性和方法为您生成静态接口(interface)。 Perl 的Win32::OLE 是否存在这样的功能?图书馆?

最佳答案

您应该从 Win32::OLE 访问属性对象的键直接。让我们以 Excel 为例。代码来自 Win32::OLE 示例 - properties.pl
它将显示 Win32::OLE 的所有属性目的。

my $Excel = Win32::OLE->new('Excel.Application', 'Quit');
# Add a workbook to get some more property values defined
$Excel->Workbooks->Add;
print "OLE object's properties:\n";
foreach my $Key (sort keys %$Excel) {
my $Value;

eval {$Value = $Excel->{$Key} };
$Value = "***Exception***" if $@;

$Value = "<undef>" unless defined $Value;

$Value = '['.Win32::OLE->QueryObjectType($Value).']'
if UNIVERSAL::isa($Value,'Win32::OLE');

$Value = '('.join(',',@$Value).')' if ref $Value eq 'ARRAY';

printf "%s %s %s\n", $Key, '.' x (40-length($Key)), $Value;
}

在一行中,要获取 Win32::OLE 对象的所有属性:
keys %$OleObject;

所有 OLE 方法都可以通过 Win32::OLE::TypeInfo 检索。 .此代码块将打印 $OleObject 的所有方法名称:
my $typeinfo = $OleObject->GetTypeInfo();
my $attr = $typeinfo->_GetTypeAttr();
for (my $i = 0; $i< $attr->{cFuncs}; $i++) {
my $desc = $typeinfo->_GetFuncDesc($i);
# the call conversion of method was detailed in %$desc
my $funcname = @{$typeinfo->_GetNames($desc->{memid}, 1)}[0];
say $funcname;
}

关于perl - 如何在 Perl 中以编程方式发现 Win32::OLE 对象的属性和方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5399589/

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