Использование Win32 :: API для доступа к методам DLL в Perl - PullRequest
0 голосов
/ 06 августа 2010

У меня есть сценарий 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 - но, честно говоря, я понятия не имею.

Может кто-нибудь указать мне правильное направление?

1 Ответ

1 голос
/ 06 августа 2010

Похоже, что сценарий Power Shell загружает .NET Framework, а не C api dll. Класс, который он использует.Я знаю, что есть некоторая поддержка из активного состояния для взаимодействия между перлом и .net.

Я не знаю, есть ли у вас значительная база кода на Perl или это ложь ваших знаний, но Power Shell прекрасно справляется с вашими потребностями в разборе, поэтому может быть легче пойти в этом направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...