Вызов Windows API

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Вызов Windows API

Сообщение Stertor » 11.08.2014 16:22:17

Здравствуйте, товарищи, подскажите, как правильно вызывать апи на лазарусе!

Допустим, я хочу вызвать FindFirstFileW. Правильно ли будет такое решение:

Код: Выделить всё
var
    hfile:thandle;
    wd:win32_find_dataw;
    path,fname:string;  // не ошибка ли это? Чем является строка в Лазарусе? Может, надо было UnicodeString?
begin
    path:='E:\'
    hfile:=findfirstfilew(pwidechar(utf8decode(path+'*.*')),wd);
    if hfile <> invalid_handle_value then
    fname:=strpas(wd.cfilename); // пытаюсь создать копию строки с данными, но не работает, сообщает, что нужно кастовать в Pchar. Разве можно кастовать массив(array[0..267] of char) в Pchar?
Аватара пользователя
Stertor
новенький
 
Сообщения: 20
Зарегистрирован: 10.08.2014 18:11:12

Re: Вызов Windows API

Сообщение Дож » 14.08.2014 02:05:48

path,fname:string; // не ошибка ли это? Чем является строка в Лазарусе? Может, надо было UnicodeString?

При использовании winapi функций с суффиксом W лучше использовать WideString.

fname:=strpas(wd.cfilename); // пытаюсь создать копию строки с данными, но не работает, сообщает, что нужно кастовать в Pchar. Разве можно кастовать массив(array[0..267] of char) в Pchar?

Попробуйте fname:=strpas(@wd.cfilename[0]);

Поле cfilename должно содержать строку с завершающим нулём, поэтому @wd.cfilename[0] — корректный указатель на PWideChar.

Рекомендую обратить внимание на кроссплатформенную надстройку из модуля SysUtils:
http://www.freepascal.org/docs-html/rtl ... chrec.html
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Вызов Windows API

Сообщение Stertor » 15.08.2014 18:24:21

Большое спасибо!
Обертки я уже смотрел, но не люблю. Предпочитаю вызывать API напрямую.
Аватара пользователя
Stertor
новенький
 
Сообщения: 20
Зарегистрирован: 10.08.2014 18:11:12


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru
cron