我拥有一个Microsoft脚本,该脚本检查以.wtv (Windows录制的电视节目)结尾的所有文件,提取一些元数据(使用名为“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方法,然后提取Title和的值。
我被告知使用了 was 32::API,但我不知道要从哪个库导入函数,也不知道函数的C原型。
因此,我的代码陷入停顿,因为我不太确定我应该使用Win32 32::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中可以看出,我应该在新的don 32::API行中添加什么,以及是否正确--但老实说,我完全不知道。
谁能帮我指出正确的方向吗?
发布于 2010-08-06 13:32:23
看起来,power shell脚本加载的是一个Toub.Mediacenter.Dvrms.Metadata.DvrmsMetadataEditor框架dll,而不是一个defined,它使用的类很可能是在其中定义的。我知道active state对pearl和.net之间的互操作性有一些支持。
我不知道您是否拥有大量的perl代码基础,或者这是否是您所知的谎言,但是power shell完全能够处理您的解析需求--朝这个方向走可能更容易。
https://stackoverflow.com/questions/3424136
复制相似问题