DLL共享数据段,实现多进程数据共享总结

 

DLL共享数据段,实现多进程数据共享总结


前段时间一直用WM_COPYDATA消息实现进程数据通信,这次软件升级想学习一下,DLL共享数据段应用,因为这个比共享内存简单一些,向VCKBASE前辈请教了很多,最后明白了下面的点滴

问题简述

假想通过DLL实现进程数据共享?

实现

第一步:在DLL的.CPP文件中定义共享数据段

#pragma data_seg("SHARED_OPCDATASET")

/* volatile */ OPCDATASET  m_gOPCDATASET[OPCDATASET_MAX_LEN] = {0};

#pragma data_seg()

#pragma comment(linker,"/SECTION:SHARED_OPCDATASET,RWS")

 

/*

如果没有初始化可尝试执行下面的操作

 _declspec(allocate("SHARED_OPCDATASET")) OPCDATASET m_gOPCDATASET[OPCDATASET_MAX_LEN];

*/

第二步:将共享段变量导出

extern  "C"

{

//导出共享段变量

OPCDATASET_API OPCDATASET extern m_gOPCDATASET[OPCDATASET_MAX_LEN];

}

第三步:在不同进程中调用

#include "OPCDataSet.h"

#pragma comment(lib, "COPCDataSet.lib")

      //A进程: 向共享段写数据

char OPCDataBuffer[56] = {0};

m_gOPCDATASET[0].dVal = FormatVarVal(pVar, OPCDataBuffer);

FILE * fp = fopen("d://Set.txt", "a");

fprintf(fp, "%f", m_gOPCDATASET[0].dVal);

fclose(fp);

      //B进程: 从共享段读数据

FILE * fp = fopen("D://get.txt", "a");

fprintf(fp, "%f", m_gOPCDATASET[0].dVal);

fclose(fp);

注:这些进程最好是与你的DLL放于同一目录下,或将你的DLL放入system32目录下

精彩指导选编:

回复人: vc_student (进士)  2009-8-19 9:45:56

可以通过dll导出一个函数专门操作共享内存呀!

只有一个进程对这个空间进行写操作,其它多个进程是只读,还用做同步吗?

回复人: vc_student (进士)  2009-8-19 9:50:28

要不写到一半别人去读怎么办?

回复人: 幸福的鬼 (书童)  2009-8-19 10:03:57

同步处理是肯定要的,但是关键代码段是不能跨进程的!!!

回复人: vc_student (进士)  2009-8-19 10:04:29

哈,想起来了,关键代码段好像不支持多进程?

回复人: vc_student (进士)  2009-8-19 10:09:46

可以使用互斥对象和事件对象

回复人: folklore (进士)  2009-8-19 10:34:26 

因为你根本就没有真正共享,要真的共享,请使用Mmap,谢 谢

回复人: 幸福的鬼 (书童)  2009-8-19 10:39:59 

这样的软件设计,强

对共享段的访问应该封装在DLL内部,才是比较好的设计

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值