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

标签 perl com win32ole

在 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/

相关文章:

php - 大数据集的流程优化

interface - COM 对象到 COM 接口(interface)的 dynamic_cast 不会影响引用计数,是吗?

visual-c++ - 谁拥有 _bstr_t::wchar_t*、_bstr_t::char* 运算符返回的字符串?

c++ - 无法包含 DirectShow 示例并对其进行编译 (PushSourceDesktop)

perl - 使用perl excel win32 ole检索Excel单元格背景颜色

perl - 将标准输入/标准输出从执行的进程重定向到 Perl 中的管道

perl - perl 中 <> 的默认文件源

regex - Perl - 从字符串中捕获特定数量的单词

excel - 如何使 Win32::OLE 在 64 位 MS OFFICE 安装上工作

带有 win32ole 的 Ruby 程序在 Windows 7 64 位下不再工作