![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Передача двумерных массивов по ссылке между Delphi и C++: обход препятствий и примеры кодаDelphi , Синтаксис , МассивыПередача двумерных массивов по ссылке между Delphi и C++При разработке API для приложения на Delphi (XE5), возникает необходимость передачи данных между функциями DLL и основной программой, написанной на C или C++. Одним из таких случаев является передача двумерных массивов, выделенных в памяти вызовом, для заполнения их значениями из DLL. ПроблемаИспользование открытых массивов (open array) в Delphi не является удобным решением для передачи двумерных массивов, так как они содержат дополнительные данные, требующие имитации в C. В связи с этим, разработчики могут рассмотреть возможность использования арифметики указателей для прямой передачи адреса массива из C в DLL. Пример кодаПример кода, предоставленный в вопросе, демонстрирует функцию
C-код вызывает эту функцию, передавая указатель на первый элемент двумерного массива и его размер.
РешениеВ ответе было подтверждено, что предложенный код работает, но его использование неудобно. Для таких задач можно использовать директиву
Другой подход — копирование в массив типа TArray
Или использование цикла для копирования:
ВыводыПередача двумерных массивов по ссылке между Delphi и C++ может быть выполнена с использованием арифметики указателей, но для более удобной и надежной работы рекомендуется использовать директиву Передача двумерных массивов по ссылке между функциями DLL, написанными на Delphi, и основной программой на C++ для заполнения их значениями из DLL. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |