У меня есть сценарий Microsoft Powershell, который проверяет все файлы в сложенном конце в .wtv (Windows Media Center, записанные телевизионные программы), извлекает некоторые метаданные (с использованием DLL под названием «Toub.MediaCenter.Dvrms.dll»), а затем записывает его на стандартный вывод:Использование Win32 :: API для доступа к методам DLL в Perl
[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 верен - но, честно говоря, у меня нет подсказки.
Может кто-нибудь указать мне в правильном направлении?
http://search.cpan.org/perldoc/Win32::API –
Спасибо, но я уже прочитал эту документацию, и он говорит мне, что мне нужно знать имя библиотеки, из которой я хочу импортировать функция и прототип C функции, о которой я не знаю и, следовательно, вопрос. – Richard