Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > получение списка дисков WinAPI


Автор: burakov 25.5.2009, 16:48
Добрый день,
пытаюсь получить список дисков при помощи Win32::API.
Ничего не получается...

вот код ...
Код

my $get_logical_drives = Win32::API -> new ('Kernel32', 'GetLogicalDriveStrings', 'N', 'P');
my $result_logical_drives = $get_logical_drives -> Call ('255');
print "$result_logical_drives\n";



и еще вопросик

Если функция Win32::API возвращает одно значение 
например (работает smile)

Код

my $get_type_drive = Win32::API -> new ('Kernel32', 'GetDriveType', 'P', 'N');
my $result_type_drive = $get_type_drive -> Call ('C:\\');
print "$result_type_drive\n";


то присваивание $get_type_drive -> Call ('C:\\') понятно...
а если функция должна возвращать список значений (да еще разношерстных)
как быть??? желательно примерчик smile

Спасибо.


Автор: zenixan 4.6.2009, 00:38
Смотрим в msdn http://msdn.microsoft.com/en-us/library/aa364975.aspx.
Читаем описание функции
Код

DWORD WINAPI GetLogicalDriveStrings(
  __in   DWORD nBufferLength,
  __out  LPTSTR lpBuffer
);


Собственно первый параметр длина буфера, второй указатель на буфер. Соотвественно
Код

use Win32::API;
Win32::API->Import("kernel32", "GetLogicalDriveStrings", 'NP');
my $buffer = " " x 80;
GetLogicalDriveStrings(length($buffer), $buffer);
print $buffer;

Вобщем внимательней надо быть с указателями.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)