У меня есть проект 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?
Да, вы должны сделать A совместно используемой DLL или определить его как extern в B и C и связать все три статически.
Нет - они не являются общими.
Из книги Рихтера «Windows через C / C ++» (стр. 583):
Когда один процесс отображает файл изображения DLL в свое адресное пространство, система создает экземпляры глобального а также статическая переменная данных.
Итак, если вам нужно разделить ресурс между несколькими исполняемыми файлами, вам нужно будет создать какой-то общий объект ядра. Я бы предложил создать именованное сопоставление файлов, которое затем можно использовать для чтения и записи из отдельных процессов (конечно, с соответствующим исключением Mutex).