两个程序,一个windows服务程序S(service),一个桌面程序G(GUI)。
我采用共享内存的方式,可实现integer,string,record等数据类型的传递。但对于类的实例,不知道该如何传递或共享。
我的目的是:在服务程序S中,已经:MyClass:=TMyClass.create;我希望在桌面程序G中能够也能读取并使用该对象,就像使用程序G自己创建的对象一样。困惑已久,工期渐近,且实验无数次,望代码明示!

解决方案 »

  1.   

    仪仪猪猪:谢谢您的答复,同时也感谢您回复我的另一帖。《向服务程序发送消息,如何在服务程序中接收该消息》
    http://topic.csdn.net/u/20090601/18/34834b1b-5386-4c0e-8313-f9edadddaf41.html
    因为没办法对对象的传递或共享,所以采用消息机制。结果消息机制也遇到问题。这两帖只要能解决其一,就都可以。
    =====================
    使用COM能满足你的要求
    =====================
    有代码实例以示范吗?因为时间太紧了,谢谢!
      

  2.   

    仪仪猪猪:您邮给我的COM demo代码已收到,时间较紧,需要过两天来消化,谢谢。欢迎其他朋友继续参加讨论
      

  3.   

    仪仪猪猪:
    您给我的COM EMO,我仔细看过了,我觉得还是不能解决我的问题。
    我的个人理解,COM是否是只能实现代码的重用,而无法实现“对象”的共享。
    由于前段时间忙业务,没时间来管代码,隔了很长时间,见谅!
      

  4.   

    不知是不是问题没说清楚,我把问题再简化和重复一下:两个应用程序E1和E2。
    在E1中,创建了类Ta的一个实例A,Ta有两个属性:Name和ID。
    假设,E1运行起来后,A.Name:='cctv1',A.ID:='2009'。
    这时我希望在E2中也能引用E1中的对象A,而且这个对象A.Name='cctv1',A.ID='2009'。
      

  5.   

    您给我的COM EMO,我仔细看过了,我觉得还是不能解决我的问题。 
    我的个人理解,COM是否是只能实现代码的重用,而无法实现“对象”的共享。
    ----------------------------------------------------------------
    COM是可以实现的,这个问题以前讨论过!
    这个例子是僵哥做的
    http://d.download.csdn.net/down/824285/unsigned
    仪仪猪猪的Demo我没看,估计是没在COM中以计数的形式进行管理Object,可能是每调用一个COM Interface,生成一个新实例,这样肯定实现不了!
      

  6.   

    在DLL中可以传对象的,比如TADOCONNECTION。你做参数传测试一下
    exports
    RunADOForm;RUNADOFORM(vADO:TADOConnection)
    ....
      

  7.   

    可以将主程序的ADO连接传到DLL中,DLL的窗体就可以查询数据了。
      

  8.   

    谢谢楼上两位,我看看liangpei2008给我的DEMO先
      

  9.   

    用内存映象实现共享
    ==================
    我只会共享基本类型的数据共享,使用FileMap共享对象实例一直没有成功,望代码或DEMO示之.
      

  10.   

    有一种叫共享内存文件映射,不知道是不是符合你的要求createfilemapping
      

  11.   

    交换数据相对简单,可直接调用方法的话估计就要用到COM了。比如远程方法调用就是一个例子。
      

  12.   

    如果你的MyClass实例中不包含指针或者字符串或其他类实例这类变量的话可以直接将你的MyClass实例复制进共享内存中某块Buffer中,其它进程要引用的话只要强制类型转换将这块共享buffer的指针转成TMyClass类就可以了。 如果你的类中有指针或字符串这类变量的话要共享就复杂的多了。 如果要做到全透明不同进程共享对象能够想到的最简单的实现方法就是替换掉delphi的内存管理器,将所有动态分配的内存都分到共享内存中。