社区
网络及通讯开发
帖子详情
请教:dll同时被两个进程调用,怎么共享dll中使用到的数据,就是dll中变量在进程1被赋值,进程2可以得到该值。谢谢
lwsandy
2006-05-13 04:07:36
请教:dll同时被两个进程调用,怎么共享dll中使用到的数据,就是dll中变量在进程1被赋值,进程2可以得到该值。谢谢
...全文
214
2
打赏
收藏
请教:dll同时被两个进程调用,怎么共享dll中使用到的数据,就是dll中变量在进程1被赋值,进程2可以得到该值。谢谢
请教:dll同时被两个进程调用,怎么共享dll中使用到的数据,就是dll中变量在进程1被赋值,进程2可以得到该值。谢谢
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lwsandy
2006-05-15
打赏
举报
回复
谢谢lother,不过这种方法目前在cb6.0不支持。采用CreateFileMapping解决。
另外有一个问题:在dll中使用一个Form上面有Indy的TIdUdpClient和TIdUdpServer两个组件。同时有两个不同程序进程连接到dll上面,dll通讯组件接受到的消息,根据不同进程句柄转发给不同进程。这样,只能够建立一个dll的form和通讯组件实例。这样如何控制,谢谢
lother
2006-05-14
打赏
举报
回复
在DLL中的工程中,假设为MouseHook.bpr(产生MouseHook.DLL)
// 1.在Unit1.cpp的最前面(#include <windows.h>之前)加上
// #pragma option -zRmydata // 改变缺省数据段名
// #pragma option -zTmyclass // 改变缺省数据类名
// 2.新建一工程同名的纯文本文件MouseHook.def,其内容只要
// 一行:
// SEGMENTS mydata CLASS 'myclass' SHARED
// 并将此文件用Project->Add Project增加到工程中;
// 3.在你的程序代码的前面定义的全局变量都将是DLL共享的,
// 在Unit1.cpp中,例如:
当
调用
的
DLL
中
有全局
变量
时
调用
它的多个实例是否
共享
同一个全局
变量
?????
当
调用
的
DLL
中
有全局
变量
时
调用
它的多个实例是否
共享
同一个全局
变量
????问题的起因原于自己在工作
中
需要
调用
一个动态库,而其
中
要用到一个全局的
变量
才能把需要的句柄给传出来,于是就想,如果有多个
进程
要
调用
这个动态库时,后面的
进程
调用
同一个动态库时,是否会把以前
调用
同一个动态库时的全局
变量
的值改变?????我猜想应该是不会的吧,于是带着这个疑惑,我写了一个示例程序来验证自己的想法。示例代码如下
进程
间同步(互斥) 以及 同一
DLL
的不同
进程
copy
共享
全局
变量
此前遇到一个问题,希望实现一个COM组件,能够被不同的AP
调用
,同时需要他们保持同步。比较好的方式是采用ATL实现singleton的Com组件,很遗憾,这部分并不熟悉,只是依照codeproject上的sample"葫芦"画了一个瓢。看起来是可以用,大概的流程也清楚,但是说起ATL,根本没看过。 那好吧,既然互斥就可以了,那就挑简单的,实现一个普通的COM组件/
DLL
,利用
进程
间互斥
DLL
共享
数据
段
全局
变量
在
DLL
内
使用
,在同一
进程
同一
DLL
文件
中
的相互
调用
是正常的,包括指针的
使用
;不同
进程
中
参数互不影响。 当C#启动后开始加载
DLL
文件,文件
中
的初始代码就会执行,所有全局
变量
会一直保存实值,直到C#程序运行结束或主动释放加载的
DLL
文件,这样
DLL
文件就可以被看作一个伴随C#主
进程
一直运行的子线程,运行过程
中
不会释放
变量
. 默认情况下,同一个程序启动多个
进程
,它们各自的
变量
值是不会相互影响的。第二个实例启动后,在修改全局
变量
的时候,系统会运用内存管理系统copy- on-write的特性来防止修
进程
间通信(1)
dll
实现
进程
的内存
共享
1.
两个
进程
访问同一个
dll
2.写入时复制(CopyOnWrite,简称COW)思想 如果有多个
调用
者(Callers)同时访问相同的资源(如内存或者是磁盘上的
数据
存储),他们会共同获取相同的指针指向相同的资源,直到某个
调用
者修改资源内容时,系统才会真正复制一份专用副本(private copy)给该
调用
者, 只有更新操作,才会去复制一份新的
数据
并更新替换,否则都是访问同一个资源。 3.1
dll
: #pragma data_seg("MySec") int nDate = 0; #pragma da
多个
进程
范文
DLL
中
的函数/全局
变量
/
数据
共享
段问题
转载请标明是引用于 http://blog.csdn.net/chenyujing1234 第一种方法:
数据
段
共享
#pragma data_seg 一、 #pragma data_seg() 1,#pragma data_seg()一般用于
DLL
中
。也就是说,在
DLL
中
定义一个
共享
的,有名字的
数据
段。最关键的是:这个
数据
段
中
的全局
变量
可以被多个
进程
共享
。 否则多个
进程
之间无法
共享
DLL
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章