我刚刚在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'
知道为什么会这样吗?我不知道如果我必须把所有的'使用'我自己的子程序之后的语句。谢谢!