Interprets a call received from a remote application server.procedure InterpretData(const Data: IDataBlock);DescriptionCall InterpretData to respond to a COM interface call that is marshaled to a data block. The Data parameter specifies an IDataBlock interface that can be used to read the marshaled version of the message.InterpretData reads the call, interprets it as an IDispatch call, and performs the appropriate actions (such as invoking a local COM interface).

解决方案 »

  1.   

    它的大体流程大概是这样:(个人意见)
        用TServerSocket和TClientSocket进行通信。
        默认了一个211的端口。
        为每一个端口,它起用了一个ServerSocket去响应它端口的事,
        这个一个差不多是:CHAT的程序,不过它加入线程和COM的interface.
        有点像而已。
    而我想知道的东西,就是上面的function中打????的意思。
    许多API不知其意,不知其所以。唉。  
      

  2.   

      FInterpreter.InterpretData(Data);
    是做什么用的,看了帮助,没什么用,它怎么处理数据的,
    还有那个peekmessage和DispatchMessage(msg)  function API不知所以??
      

  3.   

    to airhorse
    你说的是:MsgWaitForMultipleObjects(1, Event, False, WaitTime, QS_ALLEVENTS)
    吧?
      

  4.   

    1. 这个我上次看过,这个InterpretData有特点, 大概是在 Data 发送前后让另一监听程序作加密发送。在ScktSrvr上不是有个指定Interpret GUID的Edit?但用了后客户机部分就很烦,还要解密数据,我看了半天也不会作!!你可以参考一下Delphi Demo目录下的 Interpret例子2. 这个 peekmessage 和 dispatchmessage 我觉得是 WM_USER的消息会发到这,所以收到后要重新分发,上次看时我就这样认为,要不然没得解释
      

  5.   

    {建立Server--Client对话的Socket}
    type
      TSocketDispatcher = class(TServerSocket){为每个端口建立一个线程进行服务。}
    type
      TSocketDispatcherThread = class(TServerClientThread, ISendDataBlock)
    {TService 能够加入到NT中的自启动的服务中,
       是一个32位的服务程序,它能够当系统启动时加载通过SCM(Service Controls Manager)}
      //TSocketService类是为在NT中建立的。
      //所以在它的OnStart中,PostMessage(main.handle,初始化,)
      //在OnStop中,PostMessage(main.Handle,WM_CLOSE);
      TSocketService = class(TService)
      protected
        procedure Start(Sender: TService; var Started: Boolean);
        procedure Stop(Sender: TService; var Stopped: Boolean);
      public//它就不说了。
    type TSocketForm=class(TForm){
      所以在Borland Socket Service中最重要的是:
      TSocketDispatcherThread类里面的东西。
      而其中的东西就值得我们去敲啊敲啊敲啊敲啊敲啊敲啊敲啊敲啊敲啊敲啊敲敲
    }
      

  6.   


    //SocketThread是由TSocketDispatcherThread.Create 出来的,
    //所以。                               ||
    //即说TSocketDispatcher中的ServerSocket端是由它来完成。
    //好,TSocketDispatcher的对象和TSocketDispatcherThread连上了,
    //在这里,我们用控件TServerSocket,和现在用的TSocketDispatcher.Create出来的ServerSocket不一样了。嘻嘻。
    procedure TSocketDispatcher.GetThread(Sender: TObject;
      ClientSocket: TServerClientWinSocket;
      var SocketThread: TServerClientThread);
    begin
      SocketThread := TSocketDispatcherThread.Create(False, ClientSocket,
        InterceptGUID, Timeout, SocketForm.RegisteredAction.Checked);
    end;
    constructor TSocketDispatcherThread.Create(CreateSuspended: Boolean;
      ASocket: TServerClientWinSocket; const InterceptGUID: string; Timeout: Integer;
      RegisteredOnly: Boolean);
    begin
      //这里面的private object,all for COM
      FInterceptGUID := InterceptGUID;
      FTimeout := EncodeTime(Timeout div 60, Timeout mod 60, 0, 0);
      FLastActivity := Now;
      FRegisteredOnly := RegisteredOnly;
      inherited Create(CreateSuspended, ASocket);
      //if CreateSuspended =false then Execute "ClientExecute" module
      //else no else
    end;
    //哈哈,我找到它们类之间的关系了,哈哈哈哈哈哈