【发布时间】:2011-07-28 15:30:41
【问题描述】:
我正在尝试使用 Perl 的 Win32::API 模块来利用 Win32 API 函数 DsGetSiteName()。根据 Windows SDK,DsGetSiteName 的函数原型是:
DWORD DsGetSiteName(LPCTSTR ComputerName, LPTSTR *SiteName)
我使用此 API 成功编写了一个小型 C++ 函数,以便更好地了解它的实际工作原理(我正在自学 C++,但我跑题了)。
无论如何,根据我对API文档的理解,第二个参数应该是一个指向变量的指针,该变量接收指向字符串的指针。在我的 C++ 代码中,我这样写:
LPSTR site;
LPTSTR *psite = &site;
并已使用 psite 指针成功调用 API。
现在我的问题是,有没有办法使用 Perl 的 Win32::API 来做同样的事情?我尝试了以下 Perl 代码:
my $site = " " x 256;
my $computer = "devwin7";
my $DsFunc = Win32::API->new("netapi32","DWORD DsGetSiteNameA(LPCTSTR computer, LPTSTR site)");
my $DsResult = $DsFunc->Call($computer, $site);
print $site;
$DsResult 中调用的结果为零(表示成功),但 $site 中的数据不是我想要的,它看起来是 ASCII 和不可打印字符的混合体。
$site 变量可以保存分配字符串的指针地址吗?如果是这样,有没有办法使用 Win32::API 取消引用该地址以获取字符串?
提前致谢。
【问题讨论】: