假设你有一个函数read_key
,通常它会做一些事情。您应该能够用他的功能替换它,read_key_myfunction
并且它可以做其他事情。一般的方法当然是构建一个数组并注册函数指针或使用简单的 switch 语句(或两者)。
但我的目标更广泛一些:人们应该能够编写他们的 C 语言而不干扰我的代码,并且它仍然应该注册。当然,我告诉他们要实现哪个接口。
他们现在基本上做的是为我的软件编写一个库,我根据配置选项动态加载它。可以把它想象成 OpenSSL 引擎:任何人都可以编写自己的引擎,将其编译为 dll/so 并分发。他们不需要修改(或知道)OpenSSLs 代码,只要他们坚持定义的接口。
我只想要我的程序相同的(它最终将成为 OpenSSL 引擎功能的包装器)。
一位同事建议我应该在每个文件中使用相同的函数并动态加载库。这听起来对我来说是一个很好的解决方案,但我不太满意,因为我没有看到 OpenSSL 在其引擎代码中使用任何非引擎特定的函数。
如果有些事情不清楚这里是我的具体例子:
我正在扩展一个名为 sscep 的程序,它实现了自动证书更新协议。将来应该在 HSM 中进行大量加密(现在应该在 Windows 密钥管理中进行(由 OpenSSL 的 capi 引擎访问))。
虽然 OpenSSL 已经提供了一个通用接口,但我需要事先做一些事情,这取决于所使用的引擎。我还想为其他人打开快速扩展它的可能性,而不必深入研究我的代码(就像我之前的人那样)。
如果有人有任何想法,将不胜感激看到某种指南。提前致谢。