Благодарю. Ваша ссылка привела меня к функции Perl «упаковать / распаковать», которую я изучал и которая мне нужна, пока, конечно, ikegami не опубликовал решение. :)

аюсь использовать функцию 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 для разыменования этого адреса, чтобы получить строку?

Заранее спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос