使用Perl,使用
Win32::OLE
库来加载COM / OLE对象并进行控制是非常容易的.我正在遇到的问题是正在知道正在访问的对象中有哪些方法和属性可用.其他语言的一些OLE工具包可以通过读取对象上可用的所有属性和方法为您生成一个静态接口. Perl的Win32 :: OLE库是否存在这样的设施?
解决方法
@H_403_5@ 您应该直接从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; }
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; }