我拥有一个Microsoft Powershell脚本,该脚本检查.wtv(Windows Media Center录制的电视节目)折叠结尾的所有文件,提取一些元数据(使用名为“Toub.MediaCenter.Dvrms.dll”的DLL) )然后将其写入stdout:
[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 方法,然后提取标题和 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可能很明显我应该在新的Win32 :: API 行中添加什么,以及是否 $ wtv-> GetAttributes 是正确的 - 但说实话,我没有线索。
有人可以指出我正确的方向吗?
答案 0 :(得分:1)
看起来power shell脚本正在加载.net框架dll而不是C api dll它使用的类Toub.Mediacenter.Dvrms.Metadata.DvrmsMetadataEditor最有可能在那里定义。我知道有一些来自活跃状态的支持,以实现pearl和.net之间的互操作性。
我不知道你是否拥有重要的perl代码库,或者你的知识是否存在,但是power shell完全能够处理你的解析需求,可能更容易朝着那个方向前进。