• 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、

  • 相关阅读:
    51nod乘积之和
    Dell服务器安装OpenManage(OMSA)
    Nginx反向代理PHP
    搭建haproxy
    108. Convert Sorted Array to Binary Search Tree
    60. Permutation Sequence
    142. Linked List Cycle II
    129. Sum Root to Leaf Numbers
    118. Pascal's Triangle
    26. Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/cppskill/p/8258503.html
Copyright © 2020-2023  润新知