まず、Objective C プログラミングに関する知識が非常に限られていることをお伝えします。
Objective C で記述されたユーザー定義関数を呼び出す C 実行可能ファイルがあります。
ユーザー コードで何かが発生する可能性がある場合、C 関数が正常に戻るようにコードを安全にラップする最善の方法は何でしょうか?
C++ ラッパーでは、C++ 例外が C 標準で定義されていない C コードに伝播するのを防ぐために、すべての例外を try キャッチする関数を記述します。
ObjC の例外が言語の境界を越える (つまり、C コードに伝播する) ことを最初に防止する必要があると思います。そのため、次のようなラッパーを記述します。
void objc_wrap(void) {
@try {
obj_entry();
}
@catch (NSException *ex) {
// handle NSException
}
@catch (...) {
// handle the rest
}
}
ただし、言語に関する私の限られた知識では、ユーザー コードがモジュールの境界を越えて未定義の例外を引き起こすメカニズムが他にあるかどうかはわかりません。
さらに、エントリ ポイントが純粋な C である場合、ユーザー関数を呼び出す前に Objective C ランタイムの初期化/クリーンアップが必要ですか?
注: ラッパーはフォークされたプロセスで実行されるため、シグナルと exit() を処理する必要はありません。