Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2018, 22:49   #1
Fakov
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 85
По умолчанию Неверный параметр функции

Так как не силен пока достаточно в программировании в целом, спрошу асов.

Есть в подключенной к проекту DLL такой блок:

Код:
type
PFILELISTENTRY = ^FILELISTENTRY;
  FILELISTENTRY = packed record
    dwFileExists: DWORD; // Nonzero if this entry is used
    lcLocale: LCID; // Locale ID of file
    dwCompressedSize: DWORD; // Compressed size of file
    dwFullSize: DWORD; // Uncompressed size of file
    dwFlags: DWORD; // Flags for file
    szFileName: array[0..259] of Char;
  end;
И есть такая вот функция:

Код:
function SFileListFiles(hMPQ: MPQHANDLE; lpFileLists: PChar; lpListBuffer: PFILELISTENTRY; dwFlags: DWORD): BOOL; stdcall; external dll;
Вот у меня вопрос - как в теле программы правильно объявить третий параметр (lpListBuffer) в этой функции?
Я пытался через System.New(aFileListEntry); где aFileListEntry у меня задано в VAR как PFileListEntry, но программа крашится при попытке отработать функцию. Вероятно, я неправильно все делаю. Но понимаю, что от меня хотят чтобы я как то объявил буфер для функции, и вписал его. Как это сделать?

На С++ это решается почему то одной строкой:

Код:
FILELISTENTRY *lpListBuffer = new FILELISTENTRY[dwHashTableSize];
  LPCSTR lpFileLists = "C:\\WinMpq\\MyListFile.txt";
  BOOL r = SFileListFiles(hMPQ, lpFileLists, lpListBuffer, SFILE_LIST_ONLY_KNOWN);

Последний раз редактировалось Fakov; 20.07.2018 в 22:55.
Fakov вне форума Ответить с цитированием
Старый 21.07.2018, 01:56   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от Fakov Посмотреть сообщение
Так как не силен пока достаточно в программировании в целом, спрошу асов.
Цитата:
Сообщение от Fakov Посмотреть сообщение
программа крашится при попытке отработать функцию
Если программа крашится при попытке отработать функцию, то желательно приводить код вызова этой функции в программе.
northener вне форума Ответить с цитированием
Старый 21.07.2018, 12:33   #3
Fakov
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 85
По умолчанию

Вызываю ее следующим образом:

Код:
SFileListFiles(maphandle, 'C:\listfile.txt', 0, SFILE_FILE_EXIST_ONLY);
В первом параметре передаю хэндл файла с которым провожу операции, в втором параметре указываю файл на диске который функция может использовать, в третьем параметре не понимаю что нужно передать, и в четвертом указываю один из флагов функции, описанный в дллке.
Fakov вне форума Ответить с цитированием
Старый 22.07.2018, 01:52   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от Fakov Посмотреть сообщение
Вызываю ее следующим образом:
Так конечно крашится. Ибо в третьем параметре функция ждёт переменную, содержащую указатель на буфер определенного типа, а вы ей подсовываете 0. А дальше возникает закономерное AV.
northener вне форума Ответить с цитированием
Старый 22.07.2018, 11:07   #5
Fakov
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 85
По умолчанию

Как обьявить этот буфер?
Fakov вне форума Ответить с цитированием
Старый 23.07.2018, 07:25   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Как обьявить этот буфер?
Код:
var
  FBuffer: PFILELISTENTRY;
...
begin
  New(FBuffer);
  ...
  Dispose(FBuffer);
end;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параметр функции по номеру Nester Общие вопросы Delphi 4 16.01.2017 01:14
Объект как параметр функции Kazik JavaScript, Ajax 3 17.09.2015 12:36
Параметр функции MyLifeStyle Общие вопросы C/C++ 4 27.05.2014 07:35
Массив как параметр функции MovsesIV Общие вопросы C/C++ 2 02.12.2010 03:07
C++ - массив как параметр функции kefir Помощь студентам 8 12.04.2010 17:48