我有可能没有把问题交代的很清楚,我在说一下:其实问题很简单,就是怎么在两个或多个进程间共享使用一个复杂类的实例?
所谓复杂类,就是又有属性,又有方法类,并且属性也有可能是个类比如如CString什么的。我一开始认为DLL的共享数据可以做到,但是我试了,也失败了,它没办法共享复杂类,只能共享简单的数据类型或结构。后来我用了内存镜像文件来共享,结果和DLL的共享数据是一样的。最主要是类的长度是不定的,所以很难做到!为什么我要用共享类的实例呢?我是把关于对硬件操作的内容全部封装在一个类里,一开始认为,只要能在DLL里共享这个类的唯一实例就可以解决在多个进程里使用硬件了(也许我一开始就错了)。关于共享串口句柄,现在厂商在我的压力之下也在测试用共享串口句柄的方法,这个方法肯定是可行的,因为我不可能去直接改驱动,所以在这里想大家请教还有没有别的方法!
所谓复杂类,就是又有属性,又有方法类,并且属性也有可能是个类比如如CString什么的。我一开始认为DLL的共享数据可以做到,但是我试了,也失败了,它没办法共享复杂类,只能共享简单的数据类型或结构。后来我用了内存镜像文件来共享,结果和DLL的共享数据是一样的。最主要是类的长度是不定的,所以很难做到!为什么我要用共享类的实例呢?我是把关于对硬件操作的内容全部封装在一个类里,一开始认为,只要能在DLL里共享这个类的唯一实例就可以解决在多个进程里使用硬件了(也许我一开始就错了)。关于共享串口句柄,现在厂商在我的压力之下也在测试用共享串口句柄的方法,这个方法肯定是可行的,因为我不可能去直接改驱动,所以在这里想大家请教还有没有别的方法!
恩!我有点明白了!是不是这样:
我在DLL里先做一个操作硬件的类(和我原来的一样),然后在做一个接收指令并且控制这个硬件类去做的类。这两个类都只要一个实例,也不用共享,只要在DLL被第一次装载的时候初始化就可以了!第二个类我暂且叫它控制类吧,它是负责监听接收指令并且传达给那个硬件操作类,让它去做具体的事情。在这个DLL里再有一个类,作为用户接口,每装载一次都有一个实例,并被初始化。它主要是完成去连接控制类和发送用户指令的!我想了想!这个方案应该是可行的,通信可以用socket或者直接注册窗口,发窗口消息。
如果是多线程就可以共享类什么意思?能不能的稍微明白点?呵呵!我还算是在起步阶段,有很多都还不太懂!呵呵!麻烦你了!