LINUX.ORG.RU

С++ — написание библитеки классов для библиотеки на С


0

0

Добрый день!

Есть бибилиотека на С, для которой нужно написать "обвязку" на С++. В принципе, понятно, как это делать, с точки зрения разработки системы класов и так далее.

Есть какие-нибудь тонкости технического характера? Или как это делать это правильно? Имеются ввиду чисто техническте детали по взаимодействия С и С++. Где можно посмотреть, есть ли какие нибудь материалы или примеры методического характера?

Спасибо!


Прошу прощения за два поста, случайно вышло. Модераторы, если можно, снесите один, пожалуйста.

gene
() автор топика
Ответ на: комментарий от gene

просто в C++-врэппере вызываешь сишную библиотеку. Сишные декларации в Си++-ном коде должны быть обернуты в extern "C"

никаких других технических деталей нет

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Спасибо! Я так и думал. Правда, еще остались сомнения с выделением памяти. То есть в библиотеке на С изпользуется malloc/free, а не new/delete, но, на сколько я знаю -- главное это не мешать одно с другим.

gene
() автор топика

//startr of c_lib.h #ifdef __cplusplus extern "C" { #endif

...

#ifdef __cplusplus } #endif //end of c_lib.h

В идеале должно работать с обоими либами. Грабли типа const -> non-const, this -> This class -> Klass вылезут при компиляции.

В wine много таких штук.

Возможно есть смысл читануть что-то типа http://people.redhat.com/drepper/dsohowto.pdf

sf ★★★
()
Ответ на: комментарий от gene

> То есть в библиотеке на С изпользуется malloc/free, а не new/delete, но, на сколько я знаю -- главное это не мешать одно с другим.

а какая разниуа? от того, что вы будете использовать другии ф-ии для выднления/освобождения памяим ничего не изменится. в крайнем случае, операторы new/delete всегда подвластны перегрузке.

asgard
()
Ответ на: комментарий от asgard

Имелось ввиду что память выделяется через malloc, а освобождается через delete.

gene
() автор топика
Ответ на: комментарий от asgard

> а какая разниуа?

Если тебе никакой, то иди пиши лучше на PHP.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.