1

Тема: Біндінг для С

Привіт!

Написав на паскалі бібліотеку. Тепер хочу написати для неї біндінги на різні мови, для початку С/C++. Стикнувся з такою проблемою.


Як отакий код:

type TElems = array of TElem;

Записати для C?

В коді TElem не клас - простий запис (record, структура на С) без методів. TElems - динамічний массив.

Дякую :)

2

Re: Біндінг для С

mmaloc() так в С виділяється динамічний массив
а там уже гугл в придачу

- Поганому трояну фаєрвол заважає
- Ніколи не програмуйте та не пийте пиво
Якщо ви з першого разу написали програму, в якій немає жодної помилки, повідомте про це системного програмісту: він виправить помилки в компіляторі
Подякували: bees1

3

Re: Біндінг для С

Про ключове слово packed гляньте: http://www.delphibasics.ru/Packed.php Пакувати дані під час взаємодії з іншими бінарними модулями треба щоб уникнути проблем через різне вирівнювання даних. Це вирівнювання залежить від налаштувань компілятора, і потрібне для пришвидшення доступу до полів в записах, об'єктах та масивах.
Але це не єдина можлива проблема, тому варто глянути оголошення запису.
Як тільки ви наведете порядок з розміщенням даних в пам'яті, можна описувати їх відповідними конструкціями в C. record перетвориться в struct, але можливо доведеться додати перед ним "#pragma pack(1)": http://rvelthuis.de/articles/articles-convert.html Інші типи будуть замінені їхніми відповідниками приблизно так: http://docwiki.embarcadero.com/RADStudi … es_mapping А масив перетвориться на два параметри - розмір масиву та вказівник на перший елемент: http://stackoverflow.com/questions/1724 … ing-arrays

Подякували: bees1