`

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

    博客分类:
  • VC
阅读更多

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内部,才是比较好的设计

分享到:
评论

相关推荐

    不同程序通过DLL通信的实例

    本文将深入探讨如何利用DLL实现不同程序之间的通信,以及如何通过共享数据段来实现一致性。 首先,我们需要理解什么是DLL。DLL是Dynamic Link Library的缩写,它是Windows操作系统中的一个组件,包含可由多个程序...

    VC++实现两个进程间的通信--DLL

    在Windows编程领域,DLL(Dynamic Link Library)是一种重要的机制,它允许多个程序共享同一段代码和数据,从而节省内存并促进模块化开发。本示例中的"VC++实现两个进程间的通信--DLL"是一个利用DLL来实现进程间通信...

    我的Dll 我的Dll 我的Dll 我的Dll 我的Dll

    - 全局数据的管理:Win32环境下,每个进程有自己独立的全局变量副本,需使用内存映射文件或共享数据段来实现跨进程的数据共享。 - 堆栈管理:DLL没有自己的堆栈,而是使用调用它的进程的堆栈。 - 加载和卸载时机:...

    DLL的简单实现及调用

    DLL(Dynamic Link Library)是Windows操作系统中的一个重要组成部分,它是一种可执行代码的库,可以被多个程序同时调用,以实现代码复用和模块化。本文将深入探讨DLL的简单实现及调用方法。 首先,我们需要理解DLL...

    DLL返回自定义数据类型.rar

    在编程领域,动态链接库(DLL)是一种共享代码的机制,允许多个程序同时使用同一段内存中的代码,从而节省资源并提高效率。DLL文件在Windows操作系统中尤其常见,它们可以包含函数、变量和其他资源,可供应用程序...

    向DLL传递数组参数的实现方法

    在编程领域,动态链接库(DLL)是一种共享代码的方式,允许多个程序同时使用同一段代码,从而节省内存和提高效率。DLLs可以提供函数接口,供其他程序调用。当需要向DLL传递数组参数时,这涉及到数据结构的传递和内存...

    DLL木马进程大揭秘

    DLL文件是Windows操作系统中的一个重要组成部分,它允许多个程序共享同一段代码和数据,从而节省系统资源。然而,这种机制也为恶意软件提供了可乘之机,DLL木马就是其中一类。 1. DLL基础知识: - 动态链接:DLL...

    向进程注入DLL(源码)

    DLL(Dynamic Link Library)是Windows操作系统中的一种共享库机制,它包含可由多个程序同时使用的代码和数据。通过DLL,开发者可以实现代码重用,减少内存占用,并提高系统性能。 接下来,我们讨论如何实现DLL注入...

    易语言-动态调用DLL并与主程序通信,内存共享,线程安全

    内存共享是实现两个或多个进程间通信的一种方法。在易语言中,可以创建全局变量或内存块来实现这一点。当主程序和DLL都对同一块内存有权限时,它们就可以共享数据。但是,需要注意的是,不正确的内存访问可能导致...

    vc dll 就系统进程注入

    3. **加载DLL到内存**:使用`VirtualAllocEx` API函数在目标进程的地址空间中分配内存,然后使用`WriteProcessMemory`将DLL的二进制数据写入这段内存。 4. **执行DLL的入口点**:一旦DLL被写入内存,就需要调用它的...

    数据传输dll 客户端

    在Windows系统中,动态链接库(DLL)是一种可重用的代码库,允许多个程序共享同一段代码,以减少内存占用和提高效率。因此,“数据传输dll客户端”意味着它是一个可以被其他应用程序调用的库,用于实现数据传输功能...

    DLL基本知识概述

    在Win32环境中,每个进程都有自己的读/写全局变量副本,如果需要跨进程共享内存,需要使用内存映射文件或共享数据段。DLL的加载和卸载由Windows操作系统管理,通过将DLL映射到需要它的进程的虚拟地址空间来实现。DLL...

    纯DOS下实现DLL技术

    在Windows操作系统中,DLL(Dynamic Link Library)技术是一种核心特性,它允许多个程序共享同一段代码和数据,从而节省内存并提高系统效率。然而,在纯DOS环境下,由于其本质的单任务和有限的系统服务,实现DLL技术...

    DLL查看器 1.0.zip

    在Windows操作系统中,DLL文件扮演着至关重要的角色,它们包含可由多个程序共享的代码和数据,以提高资源利用率并减少磁盘空间占用。这款工具主要功能是帮助用户找出系统中哪些进程正在使用特定的DLL文件。 首先,...

    DLL技术详解

    1. 如果想要与其它进程共享内存,必须使用内存映射文件或者声明一个共享数据段 DLL技术是Windows系统的核心技术之一,掌握DLL技术是技术人员的攻坚目标。DLL技术具有降低软件系统的体积和内存使用量、提高软件系统...

    Dll机制的测试

    总结一下,DLL机制是Windows编程的核心部分,涉及到了内存管理、线程安全和资源共享等多个方面。理解DLL的工作原理和最佳实践对于开发高效、可靠的Windows应用程序至关重要。在实际开发中,应注重线程安全,合理使用...

    使用共享内存在不同程序直接传递数据

    共享内存并不涉及实际的数据复制,而是创建一个内存区域,多个进程可以映射到这个区域,直接访问其中的数据。这种方式避免了传统IPC方法(如管道、消息队列等)的数据拷贝开销,提高了数据传输的效率。 在Windows...

    qt生成DLL实现源码工程

    - DLL是一种Windows操作系统上的共享库机制,它允许多个应用程序同时使用同一段代码,节省内存并提高执行效率。 - DLL文件包含可执行代码和数据,可以被多个进程调用,减少了程序的大小和启动时间。 - 在DLL中...

    一个多线程的日志记录DLL 一个多线程的日志记录DLL

    多线程是指在一个进程中可以同时执行多个线程,每个线程都有自己的程序计数器、栈和局部变量,共享全局变量和进程资源。在多线程环境中,日志记录必须确保线程安全,防止数据竞争和死锁等问题,以保证日志信息的完整...

    DLL编程总结

    这使得多个进程可以共享同一份代码和数据,减少了内存占用,同时避免了重复加载相同库的开销。 2. 创建DLL: - 使用Visual Studio等开发环境,选择“Win32动态链接库”项目模板创建DLL工程。 - 在DLL工程中定义...

Global site tag (gtag.js) - Google Analytics