Документация для Win32::API
Call()
метода предполагает, что вы должны передать Call()
скаляр, который будет использоваться в качестве буфера для хранения возвращаемого значения;Call () сам возвратит, был ли вызов успешным или нет.
Пример:
my $return_buffer = " " x 80;
if ($res->Call(80, $return_buffer)) {
print "OK, the API call returned '$return_buffer'\n";
} else {
print "The API call failed for some reason.\n";
}
РЕДАКТИРОВАТЬ: цитирование из документов для полноты:
Здесь необходимы два параметра: длина буфера, который будет содержать возвращенный временный путь, и указатель на сам буфер.Для числовых параметров вы можете использовать либо константное выражение, либо переменную, в то время как для указателей вы должны использовать имя переменной (без ссылок на Perl, просто имя простой переменной).Также обратите внимание, что память должна быть выделена перед вызовом функции, как в C. Например, для передачи буфера из 80 символов в GetTempPath (), она должна быть предварительно инициализирована с помощью:
$lpBuffer = " " x 80;
Это выделяетстрока из 80 символов.Если вы этого не сделаете, вы, вероятно, получите ошибки исключения Runtime, и, как правило, ничего не будет работать.Поэтому вызов должен включать:
$lpBuffer = " " x 80;
$GetTempPath->Call(80, $lpBuffer);
И результат будет сохранен в переменной $ lpBuffer.Обратите внимание, что вам не нужно передавать ссылку на переменную (например, вам не нужен \ $ lpBuffer), даже если ее значение будет установлено функцией.