3

假设你有一个函数read_key,通常它会做一些事情。您应该能够用他的功能替换它,read_key_myfunction并且它可以做其他事情。一般的方法当然是构建一个数组并注册函数指针或使用简单的 switch 语句(或两者)。

但我的目标更广泛一些:人们应该能够编写他们的 C 语言而不干扰我的代码,并且它仍然应该注册。当然,我告诉他们要实现哪个接口。

他们现在基本上做的是为我的软件编写一个库,我根据配置选项动态加载它。可以把它想象成 OpenSSL 引擎:任何人都可以编写自己的引擎,将其编译为 dll/so 并分发。他们不需要修改(或知道)OpenSSLs 代码,只要他们坚持定义的接口。

我只想要我的程序相同的(它最终将成为 OpenSSL 引擎功能的包装器)。

一位同事建议我应该在每个文件中使用相同的函数并动态加载库。这听起来对我来说是一个很好的解决方案,但我不太满意,因为我没有看到 OpenSSL 在其引擎代码中使用任何非引擎特定的函数。

如果有些事情不清楚这里是我的具体例子:

我正在扩展一个名为 sscep 的程序,它实现了自动证书更新协议。将来应该在 HSM 中进行大量加密(现在应该在 Windows 密钥管理中进行(由 OpenSSL 的 capi 引擎访问))。

虽然 OpenSSL 已经提供了一个通用接口,但我需要事先做一些事情,这取决于所使用的引擎。我还想为其他人打开快速扩展它的可能性,而不必深入研究我的代码(就像我之前的人那样)。

如果有人有任何想法,将不胜感激看到某种指南。提前致谢。

4

1 回答 1

2

您所描述的通常称为插件架构/插件框架。您需要将跨平台的 dlopen/LoadLibrary 功能与一些用于注册和执行导出函数查找的逻辑相结合。您应该能够在互联网上找到有关如何执行此操作的示例。

于 2012-06-12T15:38:07.503 回答