Создайте DLL для обмена памятью между двумя процессами

Мне нужно использовать DLL для работы аналогично Linux Shared Memory. У меня очень мало опыта программирования в Windows, но я думаю, что это возможно для достижения моей цели. Я хочу сделать что-то похожее ниже:

DLL

int x; void write(int temp) { x = temp } int read() { return x; } 

Процесс 1:

 LoadDLL(); write(5); //int x = 5 now 

Процесс 2:

 LoadDLL(); printf(read()); //prints 5 since int x = 5 from Proccess 1 

Естественно, этот пример пренебрегает условиями гонки и тому подобное, но есть ли простой способ сделать что-то подобное?

Я бы использовал Microsoft Visual Studio 10 для создания DLL. Может ли кто-нибудь объяснить, как я напишу что-то такое простое и объединить его в DLL, которая может быть загружена и вызвана аналогично псевдокоду выше?

EDIT : общие сегменты памяти и файлы с памятью не могут использоваться, потому что процессы, которые я создаю, находятся в LabVIEW и Lua, которые не поддерживают вышеуказанные. Тем не менее, они поддерживают библиотеки DLL, поэтому мне нужен этот «устаревший» подход.

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

См. Здесь .

Если вы хотите обмениваться памятью между процессами, вам не нужно использовать DLL. (Так вы сделали это в 16-битной Windows, но это было почти 20 лет назад.)

Вместо этого вам нужно использовать файлы с отображением памяти . Вы в основном создаете воображаемый файл в памяти, и ваши процессы могут видеть и изменять содержимое этого мнимого файла.

вы можете создать dll, который может быть загружен обоими грушами, и эта DLL создает блок разделяемой памяти, имеет функции PutInMemory () и GetFromMemory (), которые каждый процесс загружает, может вызвать связь с другим процессом, использующим dll, см. это https://msdn.microsoft.com/en-us/library/windows/desktop/ms686958(v=vs.85).aspx

Хотя я принял решение выше, я хотел также опубликовать свой код на тот случай, если у кого-то будет очень похожая проблема, это может сэкономить им некоторую работу. Это решение дает некоторые базовые знания в отношении подхода, который решил мою проблему, так что это реальная реализация.

Этот код был быстро выполнен в виде скелета и протестирован и отлично работает. Возможно, вам понадобится синхронизация в зависимости от вашего окончательного приложения, но это, безусловно, хороший шаг:

dlltest.h

 #ifndef _DLLTEST_H_ #define _DLLTEST_H_ #include  #include  #include  extern "C" __declspec(dllexport) int get(); extern "C" __declspec(dllexport) void set(int temp); #endif 

dlltest.cpp

 #include "dlltest.h" #pragma data_seg("SHARED") int x = 0; #pragma data_seg() extern "C" __declspec(dllexport) int get() { return x; } extern "C" __declspec(dllexport) void set(int temp) { x = temp; } #pragma comment(linker, "/section:SHARED,RWS")