我个人认为三层结构利用了COM的特性,所以传递的参数类型受限制。只有标准的类型可以传递,而Delphi自定义的类应该是不能传递的。
我建议把Table的几个主要参数作为参数传递,如AliasName,TableName等等。

解决方案 »

  1.   

    使用VARIANT肯定没有问题.
    类似的问题我一直这样用.
      

  2.   

    不行, 这样通不过,不信你试试,你是如何做的.
    procedure Tre_date.bm_exec(de, so: OleVariant);
    begin
       BM.Destination:=table1
       BM.Source:=so;=table2;
       BM.execute;
    end;
      

  3.   

    我的意思是TTable这样的类是不能用COM传递的。但是可以传递Table的具体属性,比如传递AliasName,TableName,这样可以在服务器端重建TTable。
      

  4.   

    变体用variant或variant * 传递。
      

  5.   

    同意chechy(chechy)COM里如果传一个TTable过去,那意思就是传一个指针过去啦,但这个指针在AppServer的程序内存空间里没有指向任何东西啊,当然会出错,所以是不可能让你传一个TTable去AppServer的。于是只能传标准的变量,字符串数组,整形之类。你这个情况,应该传你的talbe name去AppServer,而且AppServer上也要存在这个talbe才行。
      

  6.   

    procedure Tre_date.bm_exec(de, so: OleVariant);
    begin
      BM.Destination:=de
      BM.Source:=so;
      BM.execute;
    end; 
      

  7.   


    //client:
    SocketconnectinC.AppServer.bm_exec('table1','table2');//客户端只能传字符串,不能传类table1或table2//server:
    procedure Tre_date.bm_exec(de, so: OleVariant);
    begin
      BM.Destination:=(findcomponent(de) as ttable).Name;//将字符串'table1'转化成控件table1
      BM.Source:=(findcomponent(so) as ttable).Name;//同理
      BM.execute;
    end; 
      

  8.   

    同意blucecat(我真笨~编了20几年了还赶不上盖茨) 
    李为的系统篇有讲解.