Можно ли вызвать метод из DLL, созданной в .NET из PERL? - PullRequest
3 голосов
/ 12 января 2012

Я использую PERL 5.8.8, и я не нашел способа прочитать PrivateKEY в формате pkcs # 8 в perl, поэтому я пытаюсь создать dll в C #, который может это сделать, поэтому я могувызовите методы оттуда.

Я вижу, что модуль для этого:

Win32 :: API

Пример, который они показывают, это:

  use Win32::API;
  $function = Win32::API->new(
      'mydll, 'int sum_integers(int a, int b)',
  );
  $return = $function->Call(3, 2);

Проблема в том, что в этом примере я могу иметь прямой доступ к функции sum_integers, но Как я могу вызвать мою функцию sum () с этой структурой из PERL?:

namespace testCreateDLLToUseInPERL
{
    public class Test
    {
        public Test(){
        }

        public int sum(int n1, int n2)
        {
            return n1 + n2;
        }
    }
}

Я пробовал:

 Win32::API::Struct->typedef( Test => qw{  });
 Win32::API->Import('testCreateDLLToUseInPERL', 'Test::sum(int a, int b)');
 my $myObj = Win32::API::Struct->new('Test');
 print Dumper($myObj );

Приведенный выше код завершается ошибкой с сообщением:

системе не удалось найти введенную опцию среды

  $function = Win32::API->new(
      'testCreateDLLToUseInPERL', 'int sum(int a, int b)',
  );
  print Dumper($function);
  print Win32::FormatMessage( Win32::GetLastError() );
  $return = $function->Call(3, 2);
  print $return;

Приведенный выше код завершается с сообщением:

Указанная процедура не может быть найдена

Итак, я понимаю, что DLLбыл загружен правильно, но я не указал правильный путь для достижения этой функции.

Есть идеи?

1 Ответ

1 голос
/ 12 января 2012

Win::API хорошо подходит для вызова нативных методов Win32, но для вызова объектов .NET необходимо выполнить Win32::OLE. Вам также необходимо зарегистрировать объект .NET в COM через regasm. Полную информацию обо всем, что может потребоваться , можно найти в perlmonks (хотя это датировано 2004 годом, поэтому, возможно, все пошло дальше), однако это будет отправной точкой.

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