Общая глобальная переменная в C++ статическая библиотека

У меня есть проект C++ MS (давайте назовем его проектом A), что я в настоящее время компилирую как статическая библиотека (.lib). Это определяет нечто глобальной переменной. У меня есть два других проекта, которые компилируют отдельно (назовите их B и C, соответственно), и каждый связывает общую статическую библиотеку в. И B и C являются dll's, которые заканчиваются загруженные в том же процессе. Я хотел бы совместно использовать единственный экземпляр нечто от между B и C в том же процессе: одиночный элемент. Я не уверен, как выполнить шаблон "одиночка" здесь с проектом A, так как он статически компилируется в B и C отдельно. Если я объявляю нечто как экстерн и в B и в C, я заканчиваю с различными экземплярами в B и C. Используя стандартный, простой шаблон singleton-класса со статическим getInstance методом приводит к двум статическим инстанцированиям нечто.

Там какой-либо путь состоит в том, чтобы выполнить это, в то время как проект A статически компилируется в B и C? Или я должен сделать DLL?

5
задан Zach 6 July 2010 в 14:09
поделиться

2 ответа

Да, вы должны сделать A совместно используемой DLL или определить его как extern в B и C и связать все три статически.

4
ответ дан 14 December 2019 в 13:25
поделиться

Нет - они не являются общими.

Из книги Рихтера «Windows через C / C ++» (стр. 583):

Когда один процесс отображает файл изображения DLL в свое адресное пространство, система создает экземпляры глобального а также статическая переменная данных.

Итак, если вам нужно разделить ресурс между несколькими исполняемыми файлами, вам нужно будет создать какой-то общий объект ядра. Я бы предложил создать именованное сопоставление файлов, которое затем можно использовать для чтения и записи из отдельных процессов (конечно, с соответствующим исключением Mutex).

2
ответ дан 14 December 2019 в 13:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: