例如,见
提醒自己IoC和DI是什么。
这里的问答
Is Inversion of Control specific to OO languages?
表明它不需要OO语言。
现在,我的问题是:有人在C中这样做吗?
我在问,因为我们编写嵌入式C并且正在考虑应用这些方法,而不改变我们的编程语言。
答案 0 :(得分:2)
始终在C中执行此操作。提示在第二个链接中给出了Azder的答案:
“当您为Windows API函数提供指向回调函数的指针时,您可以控制使用自己的参数调用函数。”
从这个角度来看,这个概念已经在标准库中用于函数qsort()和bsearch()。
答案 1 :(得分:0)
在Windows上,你有COM做类似的事情。您有一个接口并在DLL中提供实现。您注册DLL并且注册过程在注册表中创建一个条目映射接口(UUID)和提供实现的DLL。基于此信息,当您执行QueryInterface()时,COM服务将加载相应的DLL并创建实现对象的实例,将其类型化为请求的接口类型并返回。
这是使用COM的IoC。由于COM是在'C'中实现的,我确信它只是在制定细节以使其在您的嵌入式系统上运行。您需要一个文件来存储接口,实现和DLL之间的映射,而不是注册表。这是在Catia(来自Dassault Systemes)的CNext(V5 / V6)架构中完成的。它被称为Object建模器框架。
实现这一目标的步骤:
因此,您可以在运行时将接口绑定到其实现。