亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sconnect.pas

?? 在Midas數據庫編程中
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
  try
    GetDataBrokerList(List, FCheckRegValue);
    if List.Count > 0 then
    begin
      VList := VarArrayCreate([0, List.Count - 1], varOleStr);
      for i := 0 to List.Count - 1 do
        VList[i] := List[i];
    end else
      VList := NULL;
  finally
    List.Free;
  end;
  WriteVariant(VList, Data);
  Data.Signature := ResultSig or asGetServers;
  FSendDataBlock.Send(Data, False);
end;

procedure TDataBlockInterpreter.DoCreateObject(const Data: IDataBlock);
var
  V: OleVariant;
  VarFlags: TVarFlags;
  I: Integer;
begin
  V := CreateObject(ReadVariant(VarFlags, Data));
  Data.Clear;
  I := TVarData(V).VType;
  if (I and varTypeMask) = varInteger then
  begin
    I := varDispatch;
    Data.Write(I, SizeOf(Integer));
    I := V;
    Data.Write(I, SizeOf(Integer));
  end else
    WriteVariant(V, Data);
  Data.Signature := ResultSig or asCreateObject;
  FSendDataBlock.Send(Data, False);
end;

procedure TDataBlockInterpreter.DoFreeObject(const Data: IDataBlock);
var
  VarFlags: TVarFlags;
begin
  try
    ReleaseObject(ReadVariant(VarFlags, Data));
  except
    { Don't return any exceptions }
  end;
end;

procedure TDataBlockInterpreter.DoGetIDsOfNames(const Data: IDataBlock);
var
  ObjID, RetVal, DispID: Integer;
  Disp: IDispatch;
  W: WideString;
  VarFlags: TVarFlags;
begin
  ObjID := ReadVariant(VarFlags, Data);
  Disp := LockObject(ObjID);
  try
    W := ReadVariant(VarFlags, Data);
    Data.Clear;
    RetVal := Disp.GetIDsOfNames(GUID_NULL, @W, 1, 0, @DispID);
  finally
    UnlockObject(ObjID, Disp);
  end;
  WriteVariant(RetVal, Data);
  if RetVal = S_OK then
    WriteVariant(DispID, Data);
  Data.Signature := ResultSig or asGetID;
  FSendDataBlock.Send(Data, False);
end;

procedure TDataBlockInterpreter.DoInvoke(const Data: IDataBlock);
var
  ExcepInfo: TExcepInfo;
  DispParams: TDispParams;
  ObjID, DispID, Flags, i: Integer;
  RetVal: HRESULT;
  ExpectResult: Boolean;
  VarFlags: TVarFlags;
  Disp: IDispatch;
  VarList: PVariantArray;
  V: OleVariant;
begin
  VarList := nil;
  FillChar(ExcepInfo, SizeOf(ExcepInfo), 0);
  FillChar(DispParams, SizeOf(DispParams), 0);
  ObjID := ReadVariant(VarFlags, Data);
  Disp := LockObject(ObjID);
  try
    DispID := ReadVariant(VarFlags, Data);
    Flags := ReadVariant(VarFlags, Data);
    ExpectResult := ReadVariant(VarFlags, Data);
    DispParams.cArgs := ReadVariant(VarFlags, Data);
    DispParams.cNamedArgs := ReadVariant(VarFlags, Data);
    try
      DispParams.rgdispidNamedArgs := nil;
      if DispParams.cNamedArgs > 0 then
      begin
        GetMem(DispParams.rgdispidNamedArgs, DispParams.cNamedArgs * SizeOf(Integer));
        for i := 0 to DispParams.cNamedArgs - 1 do
          DispParams.rgdispidNamedArgs[i] := ReadVariant(VarFlags, Data);
      end;
      if DispParams.cArgs > 0 then
      begin
        GetMem(DispParams.rgvarg, DispParams.cArgs * SizeOf(TVariantArg));
        GetMem(VarList, DispParams.cArgs * SizeOf(OleVariant));
        Initialize(VarList^, DispParams.cArgs);
        for i := 0 to DispParams.cArgs - 1 do
        begin
          VarList[i] := ReadVariant(VarFlags, Data);
          if vfByRef in VarFlags then
          begin
            if vfVariant in VarFlags then
            begin
              DispParams.rgvarg[i].vt := varVariant or varByRef;
              TVarData(DispParams.rgvarg[i]).VPointer := @VarList[i];
            end else
            begin
              DispParams.rgvarg[i].vt := VarType(VarList[i]) or varByRef;
              TVarData(DispParams.rgvarg[i]).VPointer := GetVariantPointer(VarList[i]);
            end;
          end else
            DispParams.rgvarg[i] := TVariantArg(VarList[i]);
        end;
      end;
      Data.Clear;
      RetVal := Disp.Invoke(DispID, GUID_NULL, 0, Flags, DispParams, @V, @ExcepInfo, nil);
      WriteVariant(RetVal, Data);
      if RetVal = DISP_E_EXCEPTION then
      begin
        WriteVariant(ExcepInfo.scode, Data);
        WriteVariant(ExcepInfo.bstrDescription, Data);
      end;
      if DispParams.rgvarg <> nil then
      begin
        for i := 0 to DispParams.cArgs - 1 do
          if DispParams.rgvarg[i].vt and varByRef = varByRef then
            WriteVariant(OleVariant(DispParams.rgvarg[i]), Data);
      end;
      if ExpectResult then WriteVariant(V, Data);
      Data.Signature := ResultSig or asInvoke;
      FSendDataBlock.Send(Data, False);
    finally
      if DispParams.rgdispidNamedArgs <> nil then
        FreeMem(DispParams.rgdispidNamedArgs);
      if VarList <> nil then
      begin
        Finalize(VarList^, DispParams.cArgs);
        FreeMem(VarList);
      end;
      if DispParams.rgvarg <> nil then
        FreeMem(DispParams.rgvarg);
    end;
  finally
    UnlockObject(ObjID, Disp);
  end;
end;

function TDataBlockInterpreter.DoCustomAction(Action: Integer;
  const Data: IDataBlock): Boolean;
begin
  Result := False;
end;

{ TDataDispatch }

constructor TDataDispatch.Create(Interpreter: TCustomDataBlockInterpreter; DispatchIndex: Integer);
begin
  inherited Create;
  FDispatchIndex := DispatchIndex;
  FInterpreter := Interpreter;
  Interpreter.AddDispatch(Self);
end;

destructor TDataDispatch.Destroy;
begin
  if Assigned(FInterpreter) then
  begin
    FInterpreter.CallFreeObject(FDispatchIndex);
    FInterpreter.RemoveDispatch(Self);
  end;
  inherited Destroy;
end;

{ TDataDispatch.IDispatch }

function TDataDispatch.GetTypeInfoCount(out Count: Integer): HResult; stdcall;
begin
  Count := 0;
  Result := S_OK;
end;

function TDataDispatch.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
begin
  Result := E_NOTIMPL;
end;

function TDataDispatch.GetIDsOfNames(const IID: TGUID; Names: Pointer;
  NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
begin
  Result := FInterpreter.CallGetIDsOfNames(FDispatchIndex, IID, Names, NameCount,
    LocaleID, DispIDs);
end;

function TDataDispatch.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
  Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
begin
  Result := FInterpreter.CallInvoke(FDispatchIndex, DispID, IID, LocaleID, Flags,
    Params, VarResult, ExcepInfo, ArgErr);
end;


{ TTransportThread }

constructor TTransportThread.Create(AHandle: THandle; Transport: ITransport);
begin
  FParentHandle := AHandle;
  FTransport := Transport;
  FreeOnTerminate := True;
  FSemaphore := CreateSemaphore(nil, 0, 1, nil);
  inherited Create(False);
end;

destructor TTransportThread.Destroy;
begin
  CloseHandle(FSemaphore);
  inherited Destroy;
end;

procedure TTransportThread.Execute;

  procedure SynchronizeException;
  var
    SendException: TObject;
  begin
    SendException := AcquireExceptionObject;
    if Assigned(FTransport) and (SendException is ESocketConnectionError) then
      FTransport.Connected := False;
    PostMessage(FParentHandle, THREAD_EXCEPTION, 0, Integer(Pointer(SendException)));
  end;

var
  msg: TMsg;
  Data: IDataBlock;
  Event: THandle;
  Context: Integer;
begin
  CoInitialize(nil);
  try
    PeekMessage(msg, 0, WM_USER, WM_USER, PM_NOREMOVE);
    ReleaseSemaphore(FSemaphore, 1, nil);
    try
      FTransport.Connected := True;
      try
        Event := FTransport.GetWaitEvent;
        while not Terminated and FTransport.Connected do
        try
          case MsgWaitForMultipleObjects(1, Event, False, INFINITE, QS_ALLINPUT) of
            WAIT_OBJECT_0:
            begin
              WSAResetEvent(Event);
              Data := FTransport.Receive(False, 0);
              if Assigned(Data) then
              begin
                Data._AddRef;
                PostMessage(FParentHandle, THREAD_RECEIVEDSTREAM, 0, Integer(Pointer(Data)));
                Data := nil;
              end;
            end;
            WAIT_OBJECT_0 + 1:
            begin
              while PeekMessage(msg, 0, 0, 0, PM_REMOVE) do
              begin
                if (msg.hwnd = 0) then
                  case msg.message of
                    THREAD_SENDSTREAM:
                    begin
                      Data := IDataBlock(msg.lParam);
                      Data._Release;
                      Context := FTransport.Send(Data);
                      if msg.wParam = 1 then
                      begin
                        Data := FTransport.Receive(True, Context);
                        Data._AddRef;
                        PostMessage(FParentHandle, THREAD_RECEIVEDSTREAM, 0, Integer(Pointer(Data)));
                        Data := nil;
                      end else
                        PostMessage(FParentHandle, THREAD_SENDNOTIFY, 0, 0);
                    end;
                    THREAD_REPLACETRANSPORT:
                    begin
                      FTransport := ITransport(msg.lParam);
                      FTransport._Release;
                    end;
                  else
                    DispatchMessage(msg);
                  end
                else
                  DispatchMessage(msg);
              end;
            end;
          end;
        except
          SynchronizeException;
        end;
      finally
        Data := nil;
        FTransport.Connected := False;
      end;
    except
      SynchronizeException;
    end;
  finally
    FTransport := nil;
    CoUninitialize();
  end;
end;

{ TStreamedConnection }

constructor TStreamedConnection.Create(AOwner: TComponent);
var
  Obj: ISendDataBlock;
begin
  inherited Create(AOwner);
  GetInterface(ISendDataBlock, Obj);
//  FInterpreter := TDataBlockInterpreter.Create(Self, SSockets);
  FSupportCallbacks := True;
end;

destructor TStreamedConnection.Destroy;
begin
  SetConnected(False);
  FInterpreter.Free;
  if FHandle <> 0 then DeallocateHWnd(FHandle);
  if Assigned(FTransport) then FTransport.OnTerminate := nil;
  FTransIntf := nil;
  inherited Destroy;
end;

function TStreamedConnection.GetInterceptGUID: string;
begin
  if (FInterceptGUID.D1 <> 0) or (FInterceptGUID.D2 <> 0) or (FInterceptGUID.D3 <> 0) then
    Result := GUIDToString(FInterceptGUID) else
    Result := '';
end;

procedure TStreamedConnection.SetInterceptGUID(const Value: string);
var
  InterceptName: PWideChar;
begin
  if not (csLoading in ComponentState) then
    SetConnected(False);
  if Value = '' then
    FillChar(FInterceptGUID, SizeOf(FInterceptGUID), 0)
  else
  begin
    FInterceptGUID := StringToGUID(Value);
    if ProgIDFromCLSID(FInterceptGUID, InterceptName) = 0 then
    begin
      FInterceptName := InterceptName;
      CoTaskMemFree(InterceptName);
    end;
  end;
end;

procedure TStreamedConnection.SetInterceptName(const Value: string);
begin
  if Value <> FInterceptName then
  begin
    if not (csLoading in ComponentState) then
    begin
      SetConnected(False);
      if CLSIDFromProgID(PWideChar(WideString(Value)), FInterceptGUID) <> 0 then
        FillChar(FInterceptGUID, SizeOf(FInterceptGUID), 0);
    end;
    FInterceptName := Value;
  end;
end;

procedure TStreamedConnection.SetSupportCallbacks(Value: Boolean);
begin
  if Connected then Connected := False;
  FSupportCallbacks := Value;
end;

procedure TStreamedConnection.InternalOpen;
begin
  if FSupportCallbacks then
  begin
    FTransport := TTransportThread.Create(Handle, CreateTransport);
    FTransport.OnTerminate := TransportTerminated;
    WaitForSingleObject(FTransport.Semaphore, INFINITE);
  end else
  begin
    FTransIntf := CreateTransport;
    FTransIntf.SetConnected(True);
  end;
end;

procedure TStreamedConnection.InternalClose;
begin
  if Assigned(FTransport) then
  begin
    FTransport.OnTerminate := nil;
    FTransport.Terminate;
    PostThreadMessage(FTransport.ThreadID, WM_USER, 0, 0);
    if Assigned(FTransport.FTransport) then
      WaitForSingleObject(FTransport.Handle, 180000);
    FTransport := nil;
  end else
  if Assigned(FTransIntf) then
  begin
    FTransIntf.Connected := False;
    FTransIntf := nil;
  end;
end;

function TStreamedConnection.GetServerList: OleVariant;
var
  DidConnect: Boolean;
begin
  DidConnect := not Connected;
  if DidConnect then InternalOpen;
  try
    Result := Interpreter.CallGetServerList;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91成人国产精品| 久久男人中文字幕资源站| 91精品国产免费久久综合| 欧美经典一区二区三区| 奇米777欧美一区二区| 91丨国产丨九色丨pron| 精品国产精品网麻豆系列| 亚洲欧美aⅴ...| 国产成人高清在线| 日韩欧美中文字幕制服| 亚洲在线视频免费观看| 丁香桃色午夜亚洲一区二区三区| 欧美日韩卡一卡二| 亚洲乱码日产精品bd| 国产成人综合亚洲网站| 精品久久久久久久久久久久久久久| 亚洲精品视频在线看| 不卡的av电影在线观看| 久久免费看少妇高潮| 麻豆精品久久久| 欧美一区二区在线观看| 亚洲国产成人高清精品| 色狠狠一区二区| 亚洲你懂的在线视频| 成人aa视频在线观看| 欧美国产成人精品| 国产成人免费视频精品含羞草妖精| 日韩精品中文字幕在线一区| 天天综合网天天综合色| 欧美剧情片在线观看| 亚洲成人免费视频| 欧美日韩国产成人在线免费| 午夜视频在线观看一区| 日本福利一区二区| 一区二区三区在线视频免费| 日本乱人伦aⅴ精品| 亚洲综合激情另类小说区| 色综合天天视频在线观看| 亚洲色图丝袜美腿| 日本久久一区二区| 午夜不卡av在线| 91精品国产综合久久久蜜臀粉嫩| 天堂av在线一区| 精品日韩在线观看| 国产精品自拍一区| 日韩美女久久久| 欧美日韩黄视频| 美女性感视频久久| 国产日韩精品久久久| 成人av在线播放网站| 亚洲激情中文1区| 欧美日韩高清一区二区| 蜜臀av性久久久久蜜臀av麻豆| 日韩欧美在线不卡| 国产v综合v亚洲欧| 一区二区三区久久久| 91精品国产综合久久婷婷香蕉 | 国产亚洲一二三区| 高清成人免费视频| 亚洲精品一二三| 日韩欧美一二区| 成人影视亚洲图片在线| 亚洲一区二区三区激情| 日韩欧美成人激情| 成人精品视频.| 午夜精品成人在线视频| 久久嫩草精品久久久精品一| 91麻豆免费视频| 美女一区二区久久| 亚洲婷婷综合色高清在线| 777亚洲妇女| av男人天堂一区| 美女mm1313爽爽久久久蜜臀| 中文字幕乱码一区二区免费| 欧美日韩小视频| 成人黄色免费短视频| 三级精品在线观看| 一区二区三区蜜桃| 欧美精品一区二区三区蜜桃视频 | 国产欧美日韩在线| 欧美日韩日本视频| 成人禁用看黄a在线| 视频一区二区三区中文字幕| 国产精品私人影院| 日韩一级精品视频在线观看| 一道本成人在线| 国产精品一二三四五| 日日噜噜夜夜狠狠视频欧美人| 中文字幕欧美日本乱码一线二线| 91麻豆精品91久久久久同性| 91一区二区在线| 国产一区二区三区精品视频| 性感美女久久精品| 亚洲色图.com| 国产女人18水真多18精品一级做 | 成人h动漫精品一区二区| 日本视频一区二区| 亚洲一区二区三区视频在线播放| 欧美韩日一区二区三区| 欧美精品一区二区三区视频| 欧美精品乱码久久久久久| 91猫先生在线| av电影天堂一区二区在线观看| 国产老女人精品毛片久久| 日韩av中文字幕一区二区| 伊人婷婷欧美激情| 亚洲欧美欧美一区二区三区| 国产精品视频一二三区| 久久精品视频一区二区| 26uuu亚洲婷婷狠狠天堂| 日韩欧美综合一区| 678五月天丁香亚洲综合网| 在线视频你懂得一区二区三区| a亚洲天堂av| 成人av网站免费| 成人av电影免费观看| jlzzjlzz亚洲日本少妇| av电影天堂一区二区在线观看| 国产成人在线电影| 成人深夜视频在线观看| 成人做爰69片免费看网站| 成人免费毛片片v| 9久草视频在线视频精品| 91麻豆精品在线观看| 日本韩国一区二区三区视频| 色欧美日韩亚洲| 777a∨成人精品桃花网| 日韩免费高清视频| 久久综合999| 国产精品女主播在线观看| 中文字幕字幕中文在线中不卡视频| 亚洲视频在线一区| 亚洲国产另类精品专区| 男女男精品网站| 国产一区二区三区久久悠悠色av| 国产sm精品调教视频网站| www.日本不卡| 精品视频一区三区九区| 日韩精品中文字幕一区| 欧美激情一区在线| 亚洲一区二区影院| 蜜臀av一区二区在线观看| 国产在线国偷精品产拍免费yy| 成人精品视频一区| 精品视频一区二区三区免费| 欧美成人精品福利| 国产精品高潮久久久久无| 国产精品久久久久影院老司 | 欧美午夜电影网| 日韩欧美一级二级三级久久久| 国产婷婷色一区二区三区| 亚洲欧美怡红院| 久草这里只有精品视频| 9l国产精品久久久久麻豆| 4438x成人网最大色成网站| 久久久久久夜精品精品免费| 亚洲免费在线看| 免费成人在线播放| 99视频一区二区| 91精品国产综合久久久久久漫画 | 99久久久国产精品| 337p亚洲精品色噜噜狠狠| 国产偷国产偷精品高清尤物| 亚洲成a人片在线观看中文| 国产一区二区在线影院| 欧美三级电影一区| 久久久www免费人成精品| 午夜精品一区在线观看| 国产成人av一区二区| 欧美日本不卡视频| 国产精品女上位| 精品在线播放午夜| 精品视频1区2区3区| 国产精品全国免费观看高清 | 久久99精品久久久久久国产越南 | 欧美日本韩国一区| 国产精品欧美一区喷水| 美美哒免费高清在线观看视频一区二区 | 亚洲欧美日韩国产手机在线 | 午夜精品福利视频网站| 不卡视频免费播放| 久久久久久久综合| 男人的j进女人的j一区| 欧美日韩国产一级二级| 亚洲欧美韩国综合色| 99视频国产精品| 欧美国产在线观看| 国产尤物一区二区| 精品国精品自拍自在线| 天堂资源在线中文精品| 91国偷自产一区二区开放时间 | 狠狠色综合日日| 欧美一区二区免费| 五月激情综合色| 欧美三区在线视频| 亚洲成人综合网站| 欧美日韩精品一区二区在线播放 | 免费在线观看日韩欧美| 欧美日韩久久久久久| 天堂久久久久va久久久久|