加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:27:18 所属栏目:大数据 来源:网络整理
导读:使用Perl,使用 Win32::OLE 库来加载COM / OLE对象并进行控制是非常容易的.我正在遇到的问题是正在知道正在访问的对象中有哪些方法和属性可用.其他语言的一些OLE工具包可以通过读取对象上可用的所有属性和方法为您生成一个静态接口. Perl的Win32 :: OLE库是否
使用Perl,使用 Win32::OLE库来加载COM / OLE对象并进行控制是非常容易的.我正在遇到的问题是正在知道正在访问的对象中有哪些方法和属性可用.其他语言的一些OLE工具包可以通过读取对象上可用的所有属性和方法为您生成一个静态接口. 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 %sn",$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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读