如何在c++中实现有状态dll

How to implement a stateful dll in c++

本文关键字:状态 dll 实现 c++      更新时间:2023-10-16

(抱歉,无法发布代码(

在实现dll时,具有无状态的优点。一个例子是视频分析,其中结果取决于最近的帧。dll的操作具有一个状态(=最近的帧(。但是,这种状态是基于内存的,因此它可以由调用方拥有,并且dll保持无状态。

但是,您不能总是使dll成为无状态。考虑依赖于另一个状态为的第三方dll的dll。这种状态可以基于GPU、线程和通信资源。您不想将调用方暴露给其他第三方dll,因此需要(从dll中(保持状态。

如何在dll中使用c++最优雅、最有效地实现这一点

我当前的实现有一个名为DllContext的类。DllContext只实例化一次,就永远只有一个对象。有一个类型为DllContext*的静态指针,它将在该对象的生存期内保持该对象。这里的静态表示作用域:它是在任何函数体之外定义的,而不是任何类的一部分。它只能从定义3个dll入口点的最小文件访问:

dllinit():使用new创建对象

dlldeInit():使用delete删除对象

dlldoWork():调用DllContext对象的对应doWork()

我不喜欢这种解决方案。我想说它不是一个单例解决方案,因为对象只能从一个最小文件访问。然而,它仍然很丑陋,有什么建议吗?

您没有太多选择。在第一次无状态调用时调用init。使用一个小的包装器静态对象,而不是裸露的DllContext指针,以便能够在其析构函数中调用deInit。或者甚至不用担心deInit。为什么要清理要拆迁的房子?除非真的有一个原因不是"防止内存泄漏"。