我有可能没有把问题交代的很清楚,我在说一下:其实问题很简单,就是怎么在两个或多个进程间共享使用一个复杂类的实例?
所谓复杂类,就是又有属性,又有方法类,并且属性也有可能是个类比如如CString什么的。我一开始认为DLL的共享数据可以做到,但是我试了,也失败了,它没办法共享复杂类,只能共享简单的数据类型或结构。后来我用了内存镜像文件来共享,结果和DLL的共享数据是一样的。最主要是类的长度是不定的,所以很难做到!为什么我要用共享类的实例呢?我是把关于对硬件操作的内容全部封装在一个类里,一开始认为,只要能在DLL里共享这个类的唯一实例就可以解决在多个进程里使用硬件了(也许我一开始就错了)。关于共享串口句柄,现在厂商在我的压力之下也在测试用共享串口句柄的方法,这个方法肯定是可行的,因为我不可能去直接改驱动,所以在这里想大家请教还有没有别的方法!

解决方案 »

  1.   

    封装到类确实麻烦,不如建立一套类似api得调用形式,这里只能帮up...
      

  2.   

    1。使用一个exe访问硬件,其它exe用网络TCP或UDP来与之传输数据。2。使用Dll,但是使用全局变量保证它只能产生一个类实例,并且在访问硬件时用CriticalSection等防止多个进程同时访问。
      

  3.   

    我补充一点,以前硬件的操作是做成exe的,但是现在上面的要求是不能用exe,一定要封装到dll。但是DLL也可以做个COM+对象,以前也有人跟我说,用COM+是可以的,我没有确认过,所以在这里再问问大家,如果用COM+的话,是否能够实现???
      

  4.   

    ttzzj
    恩!我有点明白了!是不是这样:
    我在DLL里先做一个操作硬件的类(和我原来的一样),然后在做一个接收指令并且控制这个硬件类去做的类。这两个类都只要一个实例,也不用共享,只要在DLL被第一次装载的时候初始化就可以了!第二个类我暂且叫它控制类吧,它是负责监听接收指令并且传达给那个硬件操作类,让它去做具体的事情。在这个DLL里再有一个类,作为用户接口,每装载一次都有一个实例,并被初始化。它主要是完成去连接控制类和发送用户指令的!我想了想!这个方案应该是可行的,通信可以用socket或者直接注册窗口,发窗口消息。
      

  5.   

    songhtao
    如果是多线程就可以共享类什么意思?能不能的稍微明白点?呵呵!我还算是在起步阶段,有很多都还不太懂!呵呵!麻烦你了!