DELPHI在exe(或DLL)中的共享只是代码共享,不可能实现数据共享,
我不明白你的‘节’指的是什么,
但如果你的意思是A写的东西,B可以读出来这样的问题的话,
dll作不到,能通过消息传送数据,或最好的办法就是内存映射。

解决方案 »

  1.   

    上面的仁兄,在DLL中数据共享是可以的,每个. e x e或D L L文件的映像都由许多节组成。按照规定,每个标准节的名字均以圆点开头。
    例如,当编译你的程序时,编译器会将所有代码放入一个名叫. t e x t的节中。该编译器还将所有未经初始化的数据放入一个. b s s节,而已经初始化的所有数据则放入. d a t a节中,在VC中可以使用编译指令产生一个新的共享的节.而在delphi中没有找到类似的方法。从DELPHI编译时产生的MAP文件看只有3个节,也就是上面看到的3个。
      

  2.   

    共享节是不不被推荐的,所有的可执行映像的代码节都是共享的,只有一个副本,但是,如果往这个节中写入数据,那么就会产生新的副本。数据节都不是共享的,在老的操作系统中,全局堆栈是共享的,那么可以指定一个堆栈段,用于共享,但是这已经是没有意义的了,因为没有堆栈是共享的了。
    实现数据共享,就是使用文件映射(FileMap),实际上所有的可执行文件,DLL,都是使用文件映射机制调入的。
      

  3.   

    共享节是不不被推荐的,所有的可执行映像的代码节都是共享的,只有一个副本,但是,如果往这个节中写入数据,那么就会产生新的副本。数据节都不是共享的,在老的操作系统中,全局堆栈是共享的,那么可以指定一个堆栈段,用于共享,但是这已经是没有意义的了,因为没有堆栈是共享的了。
    实现数据共享,就是使用文件映射(FileMap),实际上所有的可执行文件,DLL,都是使用文件映射机制调入的。
      

  4.   

    虽然共享节是不不被推荐的,但是它还是有一定用处的,比如,可以通过数据共享的方式可以得到运行实例的个数,另外在全局HOOK时使用共享节非常方便,内存映射文件当然也可以实现,但是......嘿嘿,就是感觉不爽!