Вызов функции C ++ из целевого класса C - PullRequest
1 голос
/ 11 октября 2011

Я хочу вызвать функцию c ++ из моего целевого класса C, я не уверен, как ее вызвать. Пожалуйста, кто-нибудь поможет мне, предоставив примеры кодов или полезные ссылки Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 11 октября 2011

Измените расширение .m на .mm в файле Objective-C, чтобы сделать его Objective-C ++ .

2 голосов
/ 07 ноября 2011

Альтернативой переключению файла реализации вашего класса на Objective-C ++ является объявление функции C ++ как extern "C", при условии, что все ее аргументы - это типы C.Поместите это объявление в C-совместимый заголовочный файл C ++ и включите его как из файла C ++, который реализует функцию, так и из файла Objective-C, который ее вызывает.Это, конечно, будет работать только в том случае, если типы данных параметров и возвращаемый тип являются чистыми типами C, но в некоторых случаях «чище», чем подход Objective-C ++.

0 голосов
/ 17 ноября 2013

Расширяя сказанное pmjordan, если у вас есть файл .m, вызывающий .mm или .cpp, убедитесь, что основной заголовок .mm или .cpp, где объявлены вызываемые вами функции, имеетусловно скомпилированный extern "C" как этот файл .h:

#ifdef __cplusplus
extern "C" {
#endif

void functionA(void);
void functionB(const char *);

#ifdef __cplusplus
}
#endif

Когда этот заголовок включен как часть .mm или .cpp, extern "C" будет делать правильные вещи, и когда .hскомпилирован как часть вызывающего файла .c или .m, который вызывает эти функции, extern "c" исключается и не вызывает жалоб компилятора.

Использование этого решения предотвратит ненужное изменение .mфайлы в .mm файлы, чтобы вы могли просто вызывать подпрограммы C в файлах c ++.

...