(извините, не возможно отправить код)
При реализации DLL, есть преимущества отсутствия состояния. Примером является видеоанализ, где результат зависит от последних кадров. У операций dll есть состояние (= последние кадры). Однако это состояние основано на памяти, поэтому оно может принадлежать вызывающей стороне, и DLL остаются без сохранения состояния.
Однако, вы не всегда можете оставить dll без состояния. Рассмотрим библиотеку DLL, которая зависит от другой сторонней библиотеки DLL с состоянием . Это состояние может быть основано на GPU, потоках и коммуникационных ресурсах. Вы не хотите подвергать вызывающего абонента этой другой сторонней DLL, поэтому вам нужно (изнутри вашей DLL) поддерживать состояние.
Как бы это было достигнуто наиболее элегантно и эффективноиспользование c ++ внутри dll?
Моя текущая реализация имеет класс с именем DllContext
. DllContext
создается только один раз, когда-либо будет только один объект. Существует статический указатель типа DllContext*
, который будет удерживать этот объект в течение всего времени его существования. Статика здесь означает область действия: она определяется вне какого-либо тела функции, а не части какого-либо класса. Он доступен только из минимального файла, который определяет 3 точки входа dll:
dll init()
: создать объект с помощью new
dll deInit()
: удалить объект с помощью delete
dll doWork()
: вызов соответствующего doWork()
объекта DllContext
Мне не нравится это решение. Я бы сказал, что это не одноэлементное решение , потому что объект доступен только из одного минимального файла. Тем не менее, все еще безобразно, какие-либо предложения?