4

这很好用:

my $PortObj;    
$PortObj = new Win32::SerialPort ("COM12") || die "Can't open COM\n";

但是,当我尝试从 TK Entry 提供变量而不是“COM12”时,如下所示:

my $portNumVar = "12";
my $portNum = $mw->Entry(-justify=>'center',-width=>'5',-textvariable=>\$portNumVar)->pack();

在子例程内(单击按钮后):

my $PortObj;
my $com = "COM".$portNumVar;
print $com;
$PortObj = new Win32::SerialPort ($com) || die "Can't open COM\n";

我收到此错误:

Win32::API::Call: 参数 1 在 C:/Perlx86_5.16/site/lib/Win32API/CommPort.pm 第 176 行出现缓冲区溢出。

怎么可能?不应该一样吗?

谢谢,马克。

4

2 回答 2

3

Wx 和 Win32::SerialPort 也有同样的问题。就我而言,这种解决方法有效: $PortObj = new Win32::SerialPort (eval(qq("$com"))) || die "Can't open COM\n";

于 2015-09-03T14:17:19.067 回答
-1

如果变量是引用(作为 \$val 传递),则需要取消引用变量以获得正确的值而不是其内存地址(指针)。

my $com = "COM".$$portNumVar;
于 2013-10-02T09:20:02.637 回答