Советы по Delphi. Версия 1.4.3 от 1.1.2001
Шрифт:
Создание множества экземпляров
Delphi 1
Параметры
Передача
Delphi 1
В нашем случае лучшим решением будет использование процедурного типа. Допустим, что DllFunction на входе хочет получить определенную функцию, поясним это на примере кода:
Вы можете это сделать и так:
Все же я не уверен в вопросах корректности использования таким образом в вызовах DLL памяти (для меня пока неясна работа с памятью, находящейся в другом сегменте), как в этом примере, так что возможно для корректной работы вам придется объявить foo с директивой far, экспортировать ее в модуле, или что-то еще.
Также, в зависимости от того, как написана DllFunction, вы можете в вызове подразумевать приведение типа:
В этом случае вам не нужна будет переменная MyFunc или оператор @.
В Delphi/Pascal вы можете передавать функции как параметры. Тем не менее, чтобы этим воспользоваться, необходимо для компилятора установить тип. Попробуйте следующий код (я реально его компилил и тестировал):
Вы можете сделать две вещи. Во-первых, если вы хотите использовать для передачи longint, напишите следующий код:
Другая вещь, которую вы можете сделать — исключить работу с longint и вызывать функцию dll следующим образом:
Имейте в виду, что если вы собираетесь вызывать foo из DLL, то необходимо предусмотреть вопросы совместимости, для получения дополнительной информации почитайте описание функции MakeProcInstance.
Проблема передачи записи
Delphi 1
Может это не то, что вы ищете, но идея такая:
Определите базовый класс с именем, скажем, allrecs:
Затем создаем классы для каждой записи: