在Win32环境下,所有进程的空间都是相互独立的,这减少了应用程序间的相互影响,但大大增加了编程的难度。当进程在动态加载DLL时,系统自动把DLL地址映射到该进程的私有空间,而且也复制该DLL的全局数据的一份拷贝到该进程空间,每个进程所拥有的相同的DLL的全局数据其值却并不一定是相同的。当DLL内存被映射到进程空间中,每个进程都有自己的全局内存拷贝,加载DLL的每一个新的进程都重新初始化这一内存区域,也就是说进程不能再共享DLL。因此,在Win32环境下要想在多个进程中共享数据,就必须进行必要的设置。一种方法便是把这些需要共享的数据单独分离出来,放置在一个独立的数据段里,并把该段的属性设置为共享,建立一个内存共享的DLL。

WINDOWS中要使用内存共享的方式在进程间通讯需要采用DLL方式。由于WIN32把DLL装入全局内存并把DLL映射到每个程序的地址空间。所有载入DLL的应用程序只能共享程序代码,不能共享数据。要想使DLL的数据区能设计成共享的存储区,可以通过#pragma data_seg指令来建立一个新段来做完成。

四、全局共享数据的实现

可以用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为:

#pragma data_seg ("shareddata")

HWND sharedwnd=NULL;//共享数据

#pragma data_seg()

所有在data_seg pragmas语句之间声明的变量都将在shareddata段中。仅定义一个数据段还不能达到共享数据的目的,还要告诉编译器该段的

属性,有两种方法可以实现该目的(其效果是相同的),一种方法是在.DEF文件中加入如下语句:

SETCTIONS

shareddata READ WRITE SHARED

另一种方法是在项目设置链接选项中加入如下语句:

/SECTION:shareddata,rws

DLL载入内存的问题相关推荐

  1. 直接载入内存中的DLL

    http://www.cppblog.com/mybios/archive/2006/11/21/15483.html 作者:任明汉下载源代码前言你可能不希望在发布程序时附带上一个外部的 DLL,因为 ...

  2. 载入内存,让程序运行起来

    如果你的电脑上安装了QQ,你希望和好友聊天,会双击QQ图标,打开QQ软件,输入账号和密码,然后登录就可以了. 那么,QQ是怎么运行起来的呢? 首先,有一点你要明确,你安装的QQ软件是保存在硬盘中的. ...

  3. php载入内存的是本地代码吗,常量和静态变量会先载入内存后在进行执行php代码...

    static $test=1;//在php执行前就已经写入内存 $test++; var_dump($test); static $test=10;//在php执行前就已经写入内存 var_dump( ...

  4. C语言学习(三)内存初识、数据在内存中的保存形式、程序载入内存

    (一)内存与存储(硬盘)   首先要明确一点,内存不同于存储.内存中的数据存储在内存条中.而一般的存储,数据则保存在硬盘中.这里我只给出一些表象的区别,如果还想更深入的了解,请自行搜索,此篇所展示的重 ...

  5. exe和dll的内存加载

    这两天学习了PE结构后,做了一个简单的内存加载demo.在完成这个demo期间也是遇到了很多问题,大部分的问题最后都得到了解决,但还是有一些问题依然困扰着我,我在最后将会提到.不过总的来说也算是顺利完 ...

  6. C#调用Delphi开发的DLL报内存写保护的错误信息

    相信很多使用c#的朋友碰到过类似的问题,我今天在开发中也碰到类似问题,希望能给大家一点启示吧! 在delphi中申明的函数原型为 function aa(var writedate:pchar;var ...

  7. java调用dll报内存溢出错误或者程序崩溃

    因为业务需要,需要用Java去调用dll动态库来分析图片,结果调用后导致程序内存溢出,或者直接崩溃:再经过反复检查后,发现本身的我写的java代码并没有问题,最终去验证图片的时候: 1.图片访问不到, ...

  8. rstudio的数据集怎么建立和保存_R语言中怎样将自己的数据集整合到R中?怎样将多个源文件同时载入内存?...

    谢邀. 一.关于第一个问题 要考虑两个方面:数据集大小和数据集使用频率(短期暂时使用,频繁长期使用). 1.如果你的数据集不算大,或者你对这个数据集只是短期使用需求,那你可以在第一次载入数据集之后,保 ...

  9. 基于Xml 的IOC 容器-将配置载入内存

    BeanDefinitionDocumentReader 接口通过registerBeanDefinitions() 方法调用其实现类DefaultBeanDefinitionDocumentRead ...

最新文章

  1. JupyterLab 3.0,极其强大的下一代Notebook!
  2. [THUWC2017]在美妙的数学王国中畅游
  3. mysql单引号和双引号
  4. linux远程白名单,Linux的Iptables命令实战2—设置白名单
  5. hadoop com.mysql.jdbc.driver_hadoop – Impala找不到com.mysql.jdbc.Driver
  6. android 上线apk,码云 Android apk 在线构建功能上线啦!
  7. IDEA配置JAVA WEB工程踩坑总结
  8. Gcc 完全参考手册,参数说明,操作指南-Gcc Complete referene
  9. VMware Workstation无法提供该虚拟机所需的所有图形功能
  10. 几楼电路精灵——手机端 原理图 PCB
  11. 使用EXCEL进行线性回归
  12. delphi微信云支付,D7~XE10可用
  13. Git - 教程(廖雪峰)
  14. libCef基本框架与结构
  15. 麻省理工学院——人工智能公开课06
  16. 中美程序员不完全对比
  17. 计算电话费练习【20171121】
  18. 《数字图像处理》手动实现最佳陷波滤波
  19. 成大事,你一定需要经历的二次跃升
  20. 王者荣耀:又一新皮肤登场,堪称惊艳 ,网友:三国‘天下无双’

热门文章

  1. SpringBoot html转pdf 支持中文、图片水印+文字水印、页眉页脚 flying-saucer-pdf-itext5 + freemarker
  2. 【Mark】黑客与画家 - 第一章 为什么书呆子不受欢迎
  3. 表达式和语句的简单理解
  4. [Unity][插件]游戏中显示FPS帧数
  5. 微信小程序day01
  6. LabVIEW FPGA PCIe开发讲解-7.2节:目前主流的4大Xilinx FPGA PCIe DMA通信IP核讲解
  7. 胜利大逃亡 --- bfs记录
  8. word2010使用记录
  9. 暗影精灵3中mysql安装不上_惠普暗影精灵II代Pro内部做工怎么样?惠普暗影精灵II代Pro拆机详细评测图解...
  10. linux 系统重启过程,linux 系统启动流程