Я пытаюсь использовать функцию Win32 API DsGetSiteName () с помощью Perl-модуля Win32 :: API. Согласно Windows SDK, прототип функции для DsGetSiteName:
DWORD DsGetSiteName(LPCTSTR ComputerName, LPTSTR *SiteName)
Я успешно написал небольшую функцию C ++, используя этот API, чтобы лучше понять, как она на самом деле работает (я изучаю C ++ самостоятельно, но отвлекся).
Во всяком случае, исходя из моего понимания документации API, второй параметр должен быть указателем на переменную, которая получает указатель на строку. В своем коде C ++ я написал это как:
LPSTR site;
LPTSTR *psite = &site;
и успешно вызвали API с помощью указателя psite.
Теперь мой вопрос: есть ли способ сделать то же самое, используя 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 для разыменования этого адреса, чтобы получить строку?
Заранее спасибо.