У меня есть сценарий Microsoft Powershell, который проверяет все файлы в свернутом конце в .wtv (записанные телепрограммы Windows Media Center), извлекает некоторые метаданные (используя DLL-библиотеку «Toub.MediaCenter.Dvrms.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 очевидно, что я должен поместить в новую Win32 :: API строкуи правильно ли $ wtv-> GetAttributes - но, честно говоря, я понятия не имею.
Может кто-нибудь указать мне правильное направление?