2012-06-12 57 views
3

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

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

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

我只想为我的程序一样(它最终将成为OpenSSL引擎功能的包装)。

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

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

我延长了一个名为sscep程序,实现了自动续订证书的协议

。未来应该在HSM中进行大量的加密(现在它应该在Windows密钥管理(由OpenSSL的capi-engine访问)中进行)。

尽管OpenSSL已经为通用接口提供了服务,但事先需要做一些事情,并且取决于所使用的引擎。我也想让所有人都能够快速扩展它,而不必深入我的代码(就像我从前面的人那里得到的那样)。

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

回答

2

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

+0

我会研究这一点,但似乎这是我需要的。谢谢。 – javex