在Perl中使用out参数调用C#可执行方法

时间:2014-09-04 23:00:06

标签: c# perl

我有一个C#可执行文件,我将这样调用:

    UpdateData.exe -getid projectName testName idValue

在内部调用我的方法......

   GetId(string projectName, string testName, out string idValue);

我的问题是我需要从Perl脚本调用此可执行文件。我是Perl的新手,我无法弄清楚如何调用这个函数。这是我试过的。

my $idValue = 0;
my ($cmd) = "UpdateData.exe -getid $projectName $testName idValue";
my $out = `$cmd`;
chomp $out;
print $idValue

以上行仍然打印0.我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

根据您的要求,有几种方法。在上面的示例中,您将捕获程序的输出(即STDOUT)并将其放入变量中。根据写入STDOUT的内容,您必须解析结果以确定成功或失败。但这取决于产生输出的程序,它表明成功或失败是一个先决条件。

如果您知道UpdateDate.exe在成功时返回0并且其他值在失败时返回(前提条件:如果它返回相同的值,无论是否可能不值得捕获任何信息)并且您对输出不感兴趣,那么您可以使用功能系统。使用上面的示例,它看起来像:

my $idValue = 0;
my ($cmd) = "UpdateData.exe -getid $projectName $testName idValue";
# Save the returned value from the program execution
$idValue = system($cmd);
# Print out the returned value.
print $idValue;
# shift value by 8 to get the exit code.
if ( 0 != ($idValue >> 8) )
{
   # Issue and take action if required
} 

这是一个链接,可以很好地解释系统和后退差异:

What's the difference between Perl's backticks, system, and exec?