4

これはうまくいきます:

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

ただし、TK エントリから「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: C:/Perlx86_5.16/site/lib/Win32API/CommPort.pm 行 176 でパラメータ 1 にバッファ オーバーフローがありました。

それはどのように可能ですか?それは同じであるべきではありませんか?

ありがとう、マーク。

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 に答える