zoukankan      html  css  js  c++  java
  • VS2010_DLL_共享数据段

    1、问题:写了一个DLL,自己一直测试不成功(程序A设置了 数值之后,程序B 始终读不到 读出来的都是初始化时的数值...)

      具体过程:

        (1)、DLL当初没想要用 共享数据段,测试使用 一直都是OK的

        (2)、ExeA 和 ExeB 都会使用这个DLL

        (3)、想要简单的 进程通信功能,于是添加了  共享数据段。

        (4)、我测试时是这样:ExeA(存在于 目录A),ExeB(存在于 目录B),目录A != 目录B。我编译好DLL后,将DLL分别复制到 目录A 和 目录B。然后测试-->不成功,一直不成功...VS里面的设置也弄过一些,就是不成功...

        (5)、找了个XP的笔记本,将 ExeA、ExeB、DLL 放于某一目录 --> 测试OK(奇怪了)

        (6)、VMWare 打开 Win7 x86,将 ExeA、ExeB、DLL 放于某一目录 --> 测试OK(见鬼)

        (7)、尝试各种方式,最后 将开发的机子上面的 ExeA 复制到 目录B 中 --> 测试OK(C.A.O.)(此时 ExeA、ExeB、DLL位于同一目录)

          所有网页文章,都未提及此事...

    2、http://blog.csdn.net/xuplus/article/details/2291860

    #pragma comment(linker,"/SECTION:flag_data,RWS")
          这种方法只能在没有def文件时使用,如果通过def文件进行导出的话,那么设置就要在def文件内设置而不能在代码里设置了。
    
    SETCTIONS 
        flag_data READ WRITE SHARED
    
    在主文件中,用#pragma data_seg建立一 个新的数据段并定义共享数据,其具体格式为: 
    #pragma data_seg ("shareddata") //名称可以 
    //自己定义,但必须与下面的一致。 
    HWND sharedwnd=NULL;//共享数据 
    #pragma data_seg() 
    仅定义一个数据段还不能达到共享数据的目的,还要告诉编译器该段的属性,有两种方法可以实现该目的 (其效果是相同的):
        一种方法是在.DEF文件中加入如下语句: SETCTIONS shareddata READ WRITE SHARED ;
        另一种方法是在项目设置链接选项(Project Setting --〉Link)中加入如下语句: /SECTION:shareddata,rws 

      ZC:也就是说,“告诉编译器该段的属性”的方式有3种:

        (1)、"?.cpp"文件中“#pragma comment(linker,"/SECTION:xxxxxx,RWS")”(还要注意"RWS"前面不能有空格)

        (2)、".def"文件中,加入“SETCTIONS xxxxxx READ WRITE SHARED”

        (3)、设置链接选项(Project Setting-->Link)(ZC:这是VC6里面的设置位置,VS2010应该是:项目-->属性-->配置属性-->链接器-->命令行)中加入“/SECTION:shareddata,rws”

    3、

    4、

    5、

  • 相关阅读:
    实战-百度云[大文件/文件夹]下载限制破解
    IOCP之客户端及消息传递
    IOCP简单实现
    Charles V4系列更新 | 绿色特别版 | 视频教程
    Charles 3.11.5 绿色特别版
    VC运行库合集2005/2008/2010/2012/2013/2015
    手游测试之《弱网测试》
    后端性能测试不可不知的二三事
    linux性能指标及分析工具
    Shell笔记-04
  • 原文地址:https://www.cnblogs.com/cppskill/p/8258503.html
Copyright © 2011-2022 走看看