Подтвердить что ты не робот

C Wrapper для С++

Я бы хотел использовать Pure Data в качестве инструмента для создания прототипов для своей собственной библиотеки. Я узнал, что патчи Pure Data написаны на C, но моя библиотека написана на С++. Итак, как я могу использовать этот код в чистых данных? Поскольку я не использовал plain C, я хотел бы знать, как я мог бы написать C-оболочку для классов С++ и как создать экземпляр моих классов? Или мне нужно переписать все в C?

4b9b3361

Ответ 1

Вам нужно будет написать функции обертки для каждой функции, которая должна быть вызвана. Например:

// The C++ implementation
class SomeObj { void func(int); };

extern "C" {
  SomeObj* newSomeObj() {return new SomeObj();}
  void freeSomeObj(SomeObj* obj) {delete obj;}
  void SomeObj_func(SomeObj* obj, int param) {obj->func(param)}
}

// The C interface
typedef struct SomeObjHandle SomeObj;

SomeObj* newSomeObj();
void freeSomeObj(SomeObj* obj);
void SomeObj_func(SomeObj* obj, int param);

Обратите внимание, что это должен быть код на С++. extern "C" указывает, что функция использует соглашения об именах C.

Ответ 2

Позвольте мне сказать по-другому:

1) Вы можете вызывать функции C, данные и библиотеки из источника С++, и вы вызываете источник С++ из C.

2) Всякий раз, когда C вызывает исходный код С++, этот источник должен быть записан в подмножестве C на С++.

3) Часть этого использует "extern C".

4) Другая часть использует "#ifdef __cplusplus"

5) Ссылки, приведенные выше, дают много деталей

6) Я просмотрел сайт Pure Data. Возможно, вам придется внести некоторые "хитрости" в вашу библиотеку. Возможно, вы захотите создать новый заголовок. Но в принципе, я думаю, что вы, вероятно, можете достичь своей цели, чтобы ваша библиотека интегрировалась с Pure Data.

ИМХО...

Ответ 3

Вы также можете писать объекты для Pure Data с помощью С++, используя флеш-фреймворк.

Ответ 4

Вы можете абсолютно называть C из С++ - no problemo!

В худшем случае вам может потребоваться явно объявить те функции, которые вы вызываете из Pure Data, как "extern C". Но он почти уверен, что Pure Data уже сделал это для вас (вы, вероятно, увидите "extern C" в файлах заголовков Pure Data.

Здесь больше информации:

http://msdn.microsoft.com/en-us/library/0603949d%28v=vs.80%29.aspx

'Надеюсь, что это поможет!