我想用A.exe查找数据库,获得结果集,放入共享内存。
再由B.exe去取这个结果集,再用dbgrid显示出来。我弄不出来。我在网上查到:
      TSharedMemory   =   packed   record   
            Int1:               Integer;   
            Str1:               String[255];   
            Str2:               array   [0..255]   of   Char;   
            Str3:               WideString;   
            Obj:                 TMyObject;         
      end;   
      PSharedMemory   =   ^TSharedMemory; 
我用 共享内存 存取string,int等简单类型都可以成功,但是我想存取 结果集,我不行,有人说用指针什么的,现在脑子有点乱。有没有那位大哥,大姐有例子 贴一下 或 传到我邮箱([email protected]),最好能讲解下。

解决方案 »

  1.   

          TSharedMemory  =  packed  record  
                Int1:              Integer;  
                Str1:              String[255];  
                Str2:              array  [0..255]  of  Char;  
                Str3:              WideString; //这是个指针,跨进程无效 
                Obj:                TMyObject; //这是个指针,跨进程无效       
          end;  
      

  2.   

    你只能放入简单的类型
    还是用Integer和char数组之类.
      

  3.   

    顶啊to lake_cx 指针,在跨进程,就无效了吗?to Harryfin 同样的遭遇啊
      

  4.   

    akirya大侠也开始研究Delphi了?!看来Delphi有前途了,呵呵~
      

  5.   

    关于DLL间传对象的问题,我还有一种思路就是在传之前把对象序列化了,进了另外一个DLL再反序列化。这样类型信息可以继续有效,不过貌似比较损效率 - - 如果内存映射要映射对象很麻烦的话。以上只是讨论下如果想纯用DLL的话。
      

  6.   


    这个......在windows上做程序,VC Delphi BCB VB等等.都没本质区别.
    :D 
      

  7.   


    原理看懂了,but还是不太明白怎么做。能不能给个例子, 或写一些 关键代码?
      

  8.   

    dataset对象肯定无法映射可以用clientdataset间接的来做,参考tclientdataset.savetostream, loadfromstream方法,还可以利用data,xmldata等属性做
      

  9.   


    简单的说只传递基本类型的对象Integer 或者Char之类的数据
    至于对象暂时不用考虑了.复杂类型的可以考虑序列化成字符串.例如xml什么的.放到共享区域.
      

  10.   


    打包? 就是akirya说的序列化么?