三层结构中应用服务器如何调用其他模块的方法?
我的应用服务器(remote date module)
在一个模块中的建立的方法,如何在其他模块中调用他。
好像自动创建后,仍然不能在其他模块调用?
请问如何实现?

解决方案 »

  1.   

    use 你要调用方法所在的单元
      

  2.   

    不行,关键是前台如何只用一个dcom如何调用中间层其他模块建立的方法。
      

  3.   

    例:form1.button1click(sender:object);
    begin
      form2.function1(param1);
    end;
    在引用的方法前加上该方法所属对象。
      

  4.   

    例如:server:
       base.proc1
       fun.proc2
    client:
       dcom.servername:=server.base;
    如何调用通过dcom来调用fun.proc2?
      

  5.   

    用dcomconnection建立到模块的连接。
    dcomconn.appserver.method(p);
    但是我发现这样不能返回数据集。我正在问答案。
      

  6.   

    这个应该没问题,你可以将base作为客户端,在其中增接口来开放fun。
      

  7.   

    >在一个模块中的建立的方法,如何在其他模块中调用他。
    不是很明白你的意思,其他模块指的是:1.客户端? 2.remote date module?
    3.还是服务器的主界面?
    客户端调用很简单,dcom.appserver.Yourmethod;
    同在remote date module里面直接调用就好了,而在服务器的其他单元是
    不能调用的.
      

  8.   

    小声问一句;楼主的方法声明没问题吧?
    比较保险的做法是在类库编辑器界面上声明,这样他自动生产的
    代码比较放心.To : gdh_zj(Aris_go) 
    要带返回值的方法,返回参数要是指针类型.
      

  9.   

    客户端只能直接调用remotedatamodule中的接口方法,普通的模块的方法是不能直接调用的。你可以在你的remotedatamodule中为别的模块的方法提供代理,将其间接输出~~~~~~
    @@@@@@@@@@@@@@@@@@@@@@@@@@@
      

  10.   

    server:
       base.proc1
       fun.proc2
    client:
       dcom.servername:=server.base;在 base type library 中导出 
    read only property 
     Fun :IFun;
    save 后会在 base 中出现
     
    function TBase.Get_Fun: IFun;
    begin
    1. 可以在 base 上放一个 DCOM connection 连接 fun, 建立一个 remote 的 fun, 代码如下
    result := DCOMConnection.AppServer As IFun;2. 也可以调用 CreateCOMObject 建立一个 in-process 的 fun, 小心你要在 base 用一个 OleVariant 变量存建立后的 fun, 要不然它会自动释放,因为 
    OleVariant 生存期结束, 代码如下
    Base.Create 时写到
    begin
      OleFun := CreateCOMObject(ProgIDToClassID('xxx.Fun'));
    end;在 Get_Fun 中写到
    result := OleFun As IFun;3. 最好的办法是写一个 pooler(数组) 存放用 1 or 2 建立好的 fun, 在之间找个空闲的 fun 返回, 这个太麻烦 500 - 1000 行之间, 偶的 622 行实现
    end;server ok
    在客户机调用 func 请写到var
      FunServer :OleVariant;
    begin
      FunServer := DCOMConnection1.AppServer.Fun;  FunServer.{your method}
    end;
      

  11.   

    TO  comanche(太可怕) ,你实在是太可怕了,小小都不敢做版主了 5555555
    嘻嘻嘻,方法多多;
    你在类型库里声明的话,那么你可以将这个单元文件(功能实现部分)另写一个单元,同时也可以放在RDM里边,但是调用的话,也有多种方法,可以通过RDM调用,也可以在客户端声明接口直接调用;result := DCOMConnection.AppServer As IFun;哈哈,还有,用OLEVariant也可以直接调用
      

  12.   

    我后面已经找到了,可以通过服务端创建一个主模块和一个字模块,客户端用shareconnection和dcom来实现。
    delphi6中一个例子(\midas\shareconn)。谢谢comanche(太可怕) 。