在dll中使用 #pragma data_seg() 可以创建一个共享数据段
#pragma data_seg("SharedMemory")
int shared_data = -1;
#pragma data_seg()
#pragma comment(linker, "/section:SharedMemory,RWS") 如上所示,在dll中定义了一个名叫”SharedMemory”的共享数据段,它在所有进程中都是唯一的
当第一个进程调用它时,里面的变量会被初始化,从此之后,无论有多少进程调用,shared_data变量对应的都是同一块内存,这就意味着多个进程可以对同一个变量进行读写
当最后一个进程退出时,这块共享内存才会被回收,并在下一次调用时重新初始化
因此我们可以通过多个进程调用同一个dll来实现进程通讯
#pragma data_seg("SharedMemory")
int shared_data = -1;
#pragma data_seg()
#pragma comment(linker, "/section:SharedMemory,RWS")
extern "C" _declspec(dllexport) int Read() {
return shared_data;
}
extern "C" _declspec(dllexport) void Write(int data) {
shared_data = data;
}注意将下面的dll地址换成你自己的dll地址
[DllImport(@"C:\Users\Administrator\桌面\SharedMemory.dll", EntryPoint = "Read")]
public static extern int Read();
[DllImport(@"C:\Users\Administrator\桌面\SharedMemory.dll", EntryPoint = "Write")]
public static extern void Write(int data);下面的代码将会在控制台打印shared_data的变量值
from ctypes import *
dll = CDLL(r"C:\Users\Administrator\桌面\SharedMemory.dll")
result = dll.Read()
print(str(result))原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。