I need to use DLL's to function similar to Linux Shared Memory. I have very little Windows programming experience, but I think it is possible to accomplish my goal. I want to so something similar to below:
DLL
int x;
void write(int temp)
{
x = temp
}
int read()
{
return x;
}
Process 1:
LoadDLL();
write(5); //int x = 5 now
Process 2:
LoadDLL();
printf(read()); //prints 5 since int x = 5 from Proccess 1
Naturally this example neglects race conditions and the like, but is there a simple way to go about something like this?
I would be using Microsoft Visual Studio 10 to create the DLL. Could someone explain how I would write something this simple and build it into a DLL that can be loaded and called similar to the pseudo-code above?
EDIT: Shared memory segments and Memory Mapped Files cannot be used because the processes I am creating are in LabVIEW and Lua which do not support the above. They do, however, support DLLs which is why I need this "outdated" approach.
Althought I accepted the solution above, I wanted to also post my code in case anyone has a very similar issue this might save them some work. The solution provides some background knowledge on the approach that solved my problem, so here is an actual implementation of it.
This code was quickly made as a skeleton and is tested and works perfectly fine. You may need some synchronization depending on your final application, but it is definitely a good stepping stone:
dlltest.h
#ifndef _DLLTEST_H_
#define _DLLTEST_H_
#include <iostream>
#include <stdio.h>
#include <windows.h>
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")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With