我需要使用 DLL 来实现类似于 Linux 共享内存的功能。我的Windows编程经验很少,但我认为有可能实现我的目标。我想要类似下面的东西:
DLL
int x;
void write(int temp)
{
x = temp
}
int read()
{
return x;
}
Run Code Online (Sandbox Code Playgroud)
流程一:
LoadDLL();
write(5); //int x = 5 now
Run Code Online (Sandbox Code Playgroud)
流程2:
LoadDLL();
printf(read()); //prints 5 since int x = 5 from Proccess 1
Run Code Online (Sandbox Code Playgroud)
当然,这个例子忽略了竞争条件等,但是有没有一种简单的方法来处理这样的事情呢?
我将使用 Microsoft Visual Studio 10 来创建 DLL。有人可以解释一下我如何编写这么简单的东西并将其构建到一个可以加载和调用的 DLL 中,类似于上面的伪代码吗?
编辑:共享内存段和内存映射文件无法使用,因为我正在创建的进程是在LabVIEW和Lua中,它们不支持上述内容。然而,它们确实支持 DLL,这就是我需要这种“过时”方法的原因。
虽然我接受了上面的解决方案,但我还想发布我的代码,以防有人遇到非常类似的问题,这可能会节省他们一些工作。该解决方案提供了有关解决我的问题的方法的一些背景知识,因此这里是它的实际实现。
这段代码很快就被制作成了框架,并经过测试并且工作得非常好。根据您的最终应用程序,您可能需要一些同步,但这绝对是一个很好的垫脚石:
dll测试.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
Run Code Online (Sandbox Code Playgroud)
dll测试.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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10330 次 |
| 最近记录: |