我是菜鸟,目前还不会写三层结构,真不好意思。如果你愿意的话,能写个简单的编写三层结构的过程给我参考一下吗!谢谢!
我的E-MAIL:[email protected]

解决方案 »

  1.   

    在Borland\delphi(C++builder)\example\midas\adhoc目录下有例子。
      

  2.   

    看看李维的<<delphi5.x分布式应用>>里面有很详细的说明
      

  3.   

    为什么没人回答?是我的问题太简单,还是各位大虾做DCOM三层时都没有在服务器上定义过自己的方法,还是分太少了?我等你等到花儿都谢了!
      

  4.   

    还是用DComConnection 连接的配置问题吧???
    你可以先用TSocketConnection连接先试试可不可调用啊.
    没有什么特别的.
      

  5.   

    是这样的:服务端放了一个Table,客户端执行时通过ClientDataSet能看到服务端Table关联的数据,但执行服务器上的方法(如取得服务器机器上的别名)没有任何反映,(最初调试时服务端和客户端都放在同一个WIN2kSever的机器上执行服务器上的方法没有问题),究竟什么地方有问题?用TSocketConnection连接也不可调用。 
      

  6.   

    我也碰到类似的问题:使用DComConnection连不上服务器(不是同一台机器),但是一直找不到原因。但是使用Socket能够(在服务器上运行sktSvr.exe)
      

  7.   

    能用ClientDataset取数据实际上就是执行了远程调用,
    所以看来并不是调用问题。
    调用了没有反应并不是不能调用。而且是可能那个方法在执行过程中出异常,
    因为远程调用安全调用,不传回异常,你得在服务器程序中检测。fenglic(风中之城)的情况则不同,可能仍是DCOM设置问题。
      

  8.   

    我是菜鸟,目前还不会写三层结构,真不好意思。如果你愿意的话,能写个简单的编写三层结构的过程给我参考一下吗!谢谢!
    我的E-MAIL:[email protected]
      

  9.   

    最初调试时服务端和客户端都放在同一个WIN2kSever的机器上执行服务器上的方法没有问题,所以我现在也不搞不清问题究竟在哪里,halfdream(哈欠)兄再帮我看看,Thanks very much!代码如下:(服务端:NT域server,客户端:WIN98)(halfdream(哈欠)兄能不能和你用e-mail讨论一下,[email protected])
    //应用服务器中取得该机所有别名
    STDMETHODIMP TSjtqServerImpl::GetDBNames(IStringsPtr* Value)
    {
      TPtr<TStringList> Names = new TStringList();
      int i, Temp;
      HRESULT hr;  __try
      {
        try
        {
          Session->GetDatabaseNames(Names);
          for (i = 0; i < Names->Count; i++)
            (*Value)->Add(WideString(Names->Strings[i]), Temp);
          hr = S_OK;
        }
        catch (...)
        { 
          hr = E_FAIL;
        }
      }
      __finally
      {
        return hr;
      }//客户端从应用服务器取得所有别名
            ISjtqServerDisp AdhcServ;
            _di_IStrings Temp;
            IStringsPtr *Value = new IStringsPtr();
            int i;        __try
            {
                if (!DCOMConnection1->Connected)
                    DCOMConnection1->Connected = true;
                AdhcServ.Bind(DCOMConnection1->GetServer());
                __try
                {
                    Memo1->Lines->Clear();
                    GetOleStrings(Memo1->Lines, Temp);
                    *Value = Temp;
                    AdhcServ->GetDBNames(Value);
                }
                __finally
                {  if (Value)  delete Value; }
            }
            __finally
            {
                if (AdhcServ.IsBound())
                    AdhcServ.Unbind();
            }