-1

首先让我说我在Objective 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
    }
}

但是,我对语言的有限了解并不能告诉我是否有其他机制可以使用户代码跨越模块边界并导致未定义的异常。

此外,如果入口点是纯 C,在调用用户函数之前是否需要对 Objective C 运行时进行任何初始化/清理?

注意:信号和 exit() 不需要处理,因为包装器在分叉进程中运行。

4

1 回答 1

1

似乎确实,@try/ catch 用户函数是防止它跨越语言边界的最佳方法。作为奖励,任何 C++ 异常也会被该@catch (...)子句捕获,因此如果 Objective-C 代码调用 C++ 函数应该不会有任何问题。

于 2015-10-29T09:19:36.560 回答