Windows OLE

prev next
  use Win32::OLE::Const;
  my %Library;        # list of all registered type libraries

  Win32::OLE::Const->EnumTypeLibs(sub {
      my ($clsid,$title,$version) = @_;
      return unless $version =~ /^([0-9a-fA-F]+)\.([0-9a-fA-F]+)$/;
      my ($maj,$min) = (hex($1), hex($2));
      $Library{$title} = "$maj.$min";
  });

  sub ExistsTypeLib {
      my $typelib = shift;
      return $Library{$typelib}       if(exists $Library{$typelib});
      for my $lib (keys %Library) {
              return $Library{$lib}   if($lib =~ /^$typelib/);
      }
      return undef;
  }