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
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.