明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2685|回复: 5

多个ARX程序如何在内存中共享数据?

[复制链接]
发表于 2002-9-5 22:01:00 | 显示全部楼层 |阅读模式
发表于 2002-9-7 10:10:00 | 显示全部楼层

这个题目太大了,但有趣。不知两位版主有何看法

hothua朋友没说清楚他的程序要求和最终目的,如果知道他要怎么样共享内存,他已经做过些什么,遇到了什么困难,解决起来可能会要容易些。
要实现多ARX程序间的共享,我认为大致有这几种方法:
方法一,通过外部文件读写实现共享。
多个ARX程序共享数据(我理解,他的程序目的应该是要共享数据,共享内存只是他认为解决问题的方法之一),我曾经做过利用文件实现的程序。在我的程序中,有比较大的数据量被多个ARX进程共享,我通过外部数据库实现。程序需要数据时,将数据库文件调入内存,对数据库操作完成后,写入磁盘,并关闭数据库文件。这样多个ARX程序对同一数据库文件进行操作,从而实现数据共享。至于最为棘手的数据完整性和一致性问题的解决则由DBMS(数据库管理系统)负责。
方法二,共享内存区域。
多个ARX在一定的时间段内同时对内存中的某一区域进行读写操作,从而实现数据共享。共享数据的内存地址可以写入AutoCAD为用户预留的系统变量中。这样做,还要考虑内存分配和管理的问题,因为要与其它进程共享数据,进行内存读写操作的进程是不允许进行内存分配和释放操作的,于是,要有一个程序做专门的内存管理工作。它必须在所有要共享数据的进程被载入AutoCAD之前由CAD加载,并由AutoCAD最后卸载。AutoCAD这个程序时分配一定的内存空间,并将内存地址指针写入AutoCAD系统变量,该程序被卸载时释放内存,同时在此程序中要解决数据完整性和一致性问题。
方法三,利用AutoCAD系统变量实现数据传递。
这是从方法二中简化得来的方法。若需共享的数据量不大时可以采用。即将要共享的数据写入AutoCAD系统变量,另一程序从该系统变量中读出数据,这样利用AutoCAD为用户预留的空间实现数据共享。
这应该是一个比较普遍的问题,我不知道Microsoft是否提供了完整的解决方案。你可以试试以“多个DLL程序间共享数据”为标题在Visual C++论坛中提出你的问题。
最后,你的问题若得到了解决,请在些回帖告知解决方法,
发表于 2002-9-7 20:33:00 | 显示全部楼层

一般来讲用外部文件不太好

Undo时很不方便,比如Arx做了一件事,写了外部文件,但后来发现要Undo,要将外部文件改回去可不容易,
在AutoCAD中,用词典来管理数据可能是很好的一种方法。
发表于 2002-9-9 20:06:00 | 显示全部楼层

mfc提供了一个内存文件的一套函数,可以让你轻易实现两个不同的arx程序间的共享

发表于 2002-9-10 13:56:00 | 显示全部楼层

ghqyy兄,可以说详细点吗?我对此不太熟

 楼主| 发表于 2002-10-12 21:58:00 | 显示全部楼层

ghqyyi说的可能是线程共享

经过一段时间的请教和学习,有一下几种方法:
1、DDE方式,其实就是将两个DLL当作分别当作C/S端,然后进行通讯;
2、利用内存映射文件实现
   CreateFileMapping
   MapViewOfFile
   OpenFileMapping
   UnmapViewOfFile
3、。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 21:44 , Processed in 0.185707 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表