Совместное использование глобальной переменной в dll, связанной с двумя exe - PullRequest
0 голосов
/ 25 июня 2018

exe1 и exe2 статически связаны с test.dll.

//test.dll
MyComplexObject obj;
void func()
{
   //initialize obj
}
void update()
{
   //update obj
}
// other functions that use obj


//exe1
func();

//exe2
update();

Проблема в том, что exe2 будет иметь отдельную копию obj, поэтому update() фактически не будет обновлять obj, инициализированный exe1. Я хочу сохранить часть обновления в testdll сама и не хочу экспортировать obj.

Примечание: exe1 - это служба Windows, которая будет продолжать работать, а exe2 - это отдельное приложение, которое может запускаться и закрываться несколько раз.

Можно ли обновить obj с exe2?

РЕДАКТИРОВАТЬ: я узнал, что использование data_seg больше не поддерживается в Windows, поэтому нет возможности обмениваться данными между сеансами.

Моя проблема сводится к разделению переменной в dll между различными экземплярами dll (загруженными exe). Является ли межпроцессное взаимодействие, такое как boost.interprocess, только надежным способом или есть что-то подобное и что-то, что не включает boost?

1 Ответ

0 голосов
/ 25 июня 2018

Если вы используете Visual C ++, вы можете поместить переменную в раздел общей памяти, выполнив следующее:

Сначала в заголовке объявите переменную как обычную для чего-то, экспортируемого из DLL:

MYDLL_API int MyDllVariable;

В исходном файле при определении переменной:

#pragma section("shared_data", read, write, shared)
#pragma data_seg("shared_data")
__declspec(dllexport) int MyDllVariable;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...