hothua 发表于 2002-9-5 22:01:00

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

leeyeafu 发表于 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++论坛中提出你的问题。
最后,你的问题若得到了解决,请在些回帖告知解决方法,

goldenshin 发表于 2002-9-7 20:33:00

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

Undo时很不方便,比如Arx做了一件事,写了外部文件,但后来发现要Undo,要将外部文件改回去可不容易,
在AutoCAD中,用词典来管理数据可能是很好的一种方法。

ghqyy 发表于 2002-9-9 20:06:00

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

leeyeafu 发表于 2002-9-10 13:56:00

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

hothua 发表于 2002-10-12 21:58:00

ghqyyi说的可能是线程共享

经过一段时间的请教和学习,有一下几种方法:
1、DDE方式,其实就是将两个DLL当作分别当作C/S端,然后进行通讯;
2、利用内存映射文件实现
   CreateFileMapping
   MapViewOfFile
   OpenFileMapping
   UnmapViewOfFile
3、。。。
页: [1]
查看完整版本: 多个ARX程序如何在内存中共享数据?