从Win32 :: API调用返回宽字符串

时间:2018-10-29 21:00:33

标签: windows perl utf-16le

我试图弄清楚如何在Perl中读取GetCommandLineW的结果。

我知道在PowerShell下调用时,它应该返回以"开头的字符串,但是我似乎不能提取多个字符。

以下代码段加载GetCommandLineW函数并尝试调用它。✱

#! /usr/bin/env perl

use strict;
use warnings;

use Win32;
use Data::Dumper;
use Win32::API;

my $GetCommandLineW = Win32::API::More->new(
  "kernel32", "LPWSTR GetCommandLineW()"
);
die unless $GetCommandLineW;

print Dumper($GetCommandLineW->Call());

打印

$VAR1 = '"';

如果我在命令行中将LPWSTR替换为char *或其他类似字符串的东西,将会得到相同的结果。如果我使用int或无用值作为返回类型,我将返回一个指针作为十进制数。

有没有一种方法可以向Win32::API模块指示我打算读回UTF-16 LE字符串,或者可以“说服”它以将所述字符串的所有内容放入Perl标量。

我可以接受,只要所有数据都存在,结果标量中是否存在一些编码问题,需要在调用$GetCommandLineW->Call()之后立即清除。


✱shebang在那里,因此可以在有或没有Cygwin的情况下调用相同的脚本。

0 个答案:

没有答案