【问题标题】:Using Win32::API to accessing the methods of a DLL in Perl在 Perl 中使用 Win32::API 访问 DLL 的方法
【发布时间】:2010-08-06 21:32:23
【问题描述】:

我拥有一个 Microsoft Powershell 脚本,它检查以 .wtv 结尾的所有文件(Windows Media Center 录制的电视节目),提取一些元数据(使用名为“Toub.MediaCenter.Dvrms.dll”的 DLL ) 然后将其写入标准输出:

[void][System.Reflection.Assembly]::LoadFile("C:\Toub.MediaCenter.Dvrms.dll")

# Get all files ending in .wtv

foreach ($file in gci "*.wtv")
{
  $wtv = New-Object Toub.Mediacenter.Dvrms.Metadata.DvrmsMetadataEditor($file)
  $attrlist = $wtv.GetAttributes()

  # Extract the Title and Description from the recorded programme

  $t = $attrlist["Title"].value
  $d = $attrlist["WM/SubTitleDescription"].value

  # Print them to STDOUT

  "$t"
  "$d"
}

目前,我从 Perl 脚本运行它,然后解析结果。它可以工作,但是很混乱,我想放弃 powershell 部分并完全在 Perl 中完成。

但是,我完全不知道如何链接到 DLL,以便我可以在文件上调用 GetAttributes 方法,然后提取 Title 的值>WM/SubTitleDescription.

有人指出我使用 Win32::API,但我不知道要从中导入函数的库的名称,也不知道函数的 C 原型。

因此,我的代码停止运行,因为我不确定应该用 Win32::API 做什么。我的(非常基本的)存根如下所示:

use Win32::API;

foreach my $file (glob("*.wtv"))
{
  my $wtv = new Win32::API(...stuck here...);

  # Complete guesswork from here on...

  print $wtv->GetAttributes("Title") . "\n";
  print $wtv->GetAttributes("WM/SubTitleDescription") . "\n";
}

我猜想从上面的 Powershell 中可以看出我应该在 new Win32::API 行中添加什么以及是否 $wtv->GetAttributes 是正确的 - 但老实说,我不知道。

有人可以指点我正确的方向吗?

【问题讨论】:

  • 谢谢,但我已经阅读了该文档,它告诉我需要知道要从中导入函数的库的名称和函数的 C 原型——两者都不是我知道,因此是这个问题。

标签: perl api winapi powershell metadata


【解决方案1】:

看起来 power shell 脚本正在加载 .net 框架 dll 而不是 C api dll,它使用的类 Toub.Mediacenter.Dvrms.Metadata.DvrmsMetadataEditor 很可能在那里定义。我知道活动状态对pearl和.net之间的互操作性有一些支持。

我不知道您是否拥有重要的 perl 代码库,或者这是否是您的知识所在,但 Power shell 完全能够处理您的解析需求,朝那个方向发展可能会更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2011-07-19
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多