Безопасная обработка пользовательского кода Objective C из базы кода C
Позвольте мне сначала сказать, что у меня очень ограниченные знания в программировании на языке C.
У меня есть исполняемый файл C, который вызывает пользовательскую функцию, написанную в Objective C.
При условии, что что- либо может произойти в пользовательском коде, каков будет лучший способ безопасно обернуть код, чтобы функция C возвращала изящно?
В оболочке C++ я написал бы функцию, пытающуюся перехватить все исключения, чтобы исключить распространение исключения C++ в код C, где поведение не определено стандартом C.
Я полагаю, что сначала я должен предотвратить пересечение границ языка любым исключением ObjC (т. Е. Распространяться в код C), поэтому я бы написал обертку наподобие:
void objc_wrap(void) {
@try {
obj_entry();
}
@catch (NSException *ex) {
// handle NSException
}
@catch (...) {
// handle the rest
}
}
Однако мое ограниченное знание языка не говорит мне, существуют ли другие механизмы, которые заставили бы пользовательский код пересекать границу модуля и вызывать неопределенное исключение.
Кроме того, необходима ли какая-либо инициализация / очистка среды выполнения Objective C перед вызовом пользовательской функции, при условии, что точка входа - чистый C?
Примечание. Сигналы и exit() обрабатывать не нужно, поскольку обертка запускается в разветвленном процессе.
1 ответ
Кажется, действительно, @try/catching пользовательская функция - лучший способ предотвратить ее пересечение языковых границ. В качестве бонуса любые исключения C++ также перехватываются @catch (...)
предложение, поэтому не должно быть никаких проблем, если код Objective-C вызывает функции C++.