(抱歉,无法发布代码)
实现dll时,具有无状态的优点。一个例子是视频分析,其中结果取决于最近的帧。 dll的操作具有状态(=最近的帧)。但是,此状态基于内存,因此调用方可以拥有它,并且dll保持无状态。
但是,您不能总是使dll变为无状态。考虑一个依赖于状态为另一个第三方dll的dll 。该状态可以基于GPU,线程和通信资源。您不想将调用者暴露给其他第三方dll,因此您需要(从dll中)保持状态。
如何在dll中使用c ++最优雅,最有效地实现这一目标?
我当前的实现有一个名为DllContext
的类。 DllContext
仅实例化一次,永远只有一个对象。有一个类型为DllContext*
的静态指针,它将在该对象的生存期内保存该对象。静态在这里表示作用域:它在任何函数体之外定义,而不是任何类的一部分。它只能从定义3个dll入口点的最小文件中访问:
dll init()
:
使用new
dll deInit()
:
使用delete
dll doWork()
:
调用doWork()
对象的相应DllContext
我不喜欢这种解决方案。我会说这不是单例解决方案,因为该对象只能从一个最小文件中访问。但是,这仍然很难看,有什么建议吗?