C中函数的动态接口

时间:2012-06-12 15:31:56

标签: c

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

但我的目标有点广泛:人们应该能够编写他们的C-stuff而不是干扰我的代码,它仍然应该注册。当然,我告诉他们要实现哪个接口。

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

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

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

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

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

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

如果有人有任何想法,我们将非常感谢您看到某种指导方针。提前谢谢。

1 个答案:

答案 0 :(得分:2)

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