Комментарии 11
У вашего кода нет форматирования! Пожалуйста, поправьте это.
Спасибо, очень ценной дополнение!
Дополню, что для создания простых структур можно использовать модуль struct
Дополню, что для создания простых структур можно использовать модуль struct
А вот передача больших массивов данных, или еще лучше двумерных массивов данных, или даже двумерных массивов объектов.
А может быть просто взять numpy?
https://docs.scipy.org/doc/numpy/reference/c-api.html
Если ваш код должен работать с большими многомерными массивами, то numpy — это то, что нужно.
Да про numpy знаю, однако считаю, что он нужен для реально огромных массивов данных, например для анализа статистических данных или еще чего подобного. Когда речь идет о нескольких десятков объектов, у меня например было около шести десятков, то передавать их по одному абсолютно неадекватная задача, но и пристыковывать к проекту большую и тяжелую библиотеку только ради одной задачи передачи этих объектов в dll, без использования еще где либо — считаю слишком не рационально. Тот пример, что я привел, должен заполнить как раз ту середину, между минимумом элементов, которые можно передать отдельными параметрами и теми огромными массивами, где без numpy уже не обойтись.
Посмотрел Ваш материал, что бы дополнить свой. Только пришлось помучиться, как получить структуру обратно…
Ну для этого есть два варианта.
1. Создать структуру в python и передать указатель на нее одним из аргументов.
2. Создать структуру в коде C++ dll, и возвращать указатель на нее, но в таком случае надо не забывать и делать вторую функцию для удаления созданной структуры, чтобы не возникало утечек с памятью. В вашей статье вы возвращали указатель на созданный через new класс, но нигде потом не вызвали удаление данного класса из памяти. Но так как это в том контексте не особо важно было, я не стал указывать на это, но если вы хотите делать возвращение структуры по второму варианту, то надо не забывать освобождать выделенную память.
1. Создать структуру в python и передать указатель на нее одним из аргументов.
2. Создать структуру в коде C++ dll, и возвращать указатель на нее, но в таком случае надо не забывать и делать вторую функцию для удаления созданной структуры, чтобы не возникало утечек с памятью. В вашей статье вы возвращали указатель на созданный через new класс, но нигде потом не вызвали удаление данного класса из памяти. Но так как это в том контексте не особо важно было, я не стал указывать на это, но если вы хотите делать возвращение структуры по второму варианту, то надо не забывать освобождать выделенную память.
Ну да, поскольку делал как пример, то и забил на free. Надо бы дополнить.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Передача двумерных списков из python в DLL