我正在为我们的产品设计一个插件系统的界面。当前的插件将用 C# 编写,但我设想将来至少创建 C/C++ 包装器。
考虑到潜在的语言差异,我很困惑如何处理错误。通常我对错误使用异常,但我假设不同语言之间的异常机制差异会使这一点变得不简单,并且某些语言不支持异常。
如果是这种情况,那么我能看到的唯一其他模式是:
A) 从所有函数返回错误代码。这仅允许预定义的错误。有关临时/未知错误的信息是不可能的。
B) 从所有函数返回布尔值并提供 GetLastError() 类型函数。由于可能的线程问题,我对此并不热衷(另一个线程在读取之前更改了错误)。
C) 从所有函数返回布尔值,并让 API 提供一个 LogError() 函数,插件可以使用该函数记录任何问题。由于在调用时难以以编程方式对特定错误做出反应,因此对此也不热衷。
D)将错误信息对象传递给每个可以填写的函数调用。Urgh。
有没有针对跨语言 API 发展起来的最佳实践?