可以从PERL中使用.NET创建的DLL调用方法吗?

时间:2012-01-12 16:54:20

标签: .net perl dll

我正在使用PERL 5.8.8并且我没有找到在perl中以pkcs#8格式读取PrivateKEY的方法,所以我试图在C#中创建一个可以做到的dll,所以我可以从那里调用方法。

我看到执行此操作的模块是:

  

Win32 :: API

他们展示的例子是:

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

问题是在示例中我可以直接访问函数sum_integers 但如何从PERL调用我的函数sum()?#

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 个答案:

答案 0 :(得分:1)

Win::API适用于调用本机Win32方法,但要调用.NET对象,则需要通过Win32::OLE。您还需要通过regasm向COM注册.NET对象。可能需要的所有内容的完整细节is up on perlmonks(虽然这是2004年的日期,所以事情可能已经发生了变化),但这将是一个起点。