简单的Perlnet示例不适用于Visual Studio Express 2013,C#

时间:2014-10-20 19:26:11

标签: c# perl visual-studio-2013

我刚刚在Win 7下安装了ActiveState的Perl开发人员工具包(PDK),最新的ActiveState社区perl 64位。我试图使用Perlnet'该包的工具,它允许您将Perl代码包装到DLL中,以便您可以将它与.NET语言一起使用。因此,我尝试使用Perlnet和Visual Studio 2013 Express在C#中构建一个很好的gui,并绑定了Perl代码。

但是我得到了一个奇怪的运行时错误,如下所示。我试图将其简化为可以再现问题的最简单的例子。以下是我要做的步骤:

我有这个' test_perlnet.pl'档案:

use warnings;
use strict;

# Putting the following 'use Log::Report' line here (before the package
# and subroutine definition below) causes Visual Studio Express 2013
# run time error when I try to call 'do_some_thing()' 

use Log::Report;  # There's nothing special about this package; 
                  #'use'ing many other standard perl CPAN packages also gives the run-time error

# Declare my own package now:
package test_perlnet;

# Declare the interface stuff that Perlnet (the 'plc' compiler) needs to integrate this into a .DLL
=for interface
    [interface: pure]
    str do_some_thing();
=cut

sub do_some_thing {
      return "hello there.";
}

# But putting the 'use Log::Report' line here (**after** the package
# and subroutine definition above) works just fine;
# Visual Studio can then see and call the perl function 'do_some_thing()' 
# and I get "hello there." in the C# button callback.

#use Log::Report;

然后我使用" plc --force --target library test_perlnet.pl"使用ActiveState" plc')创建一个test_perlnet.dll。然后我将生成的dll添加到我的C sharp项目参考中。然后我可以从这个C#按钮单击回调调用perl代码:

private void Button_Click_1(object sender, RoutedEventArgs e)
{
   test_perlnet tp = new test_perlnet();
   Console.WriteLine("Message from the perl code: {0}", tp.do_some_thing());
}

但是当我单击按钮时,我收到以下Visual Studio 2013 Express错误

  

未处理的类型' PerlRuntime.PerlException'发生在test_perlnet.dll中   附加信息:找不到对象方法" do_some_thing"通过包" test_perlnet"

同样,如果我使用“使用Log :: Report”,我只能得到错误。'在perl代码中之前 我的包定义,如上所示。

这个问题很普遍,因为当我尝试确切的ActiveState' Babelfish'在http://docs.activestate.com/pdk/8.0/PerlNET_overview.html的例子,同样的事情发生了:Visual Studio找不到函数' fish.translate()'和' fish.languages()'即使我添加了' Babelfish.dll'

知道为什么会这样吗?我不知道如果我必须把所有的'使用'我自己的子程序之后的语句。谢谢!

0 个答案:

没有答案