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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sconnect.pas

?? 這是一個(gè)三層的進(jìn)銷存系統(tǒng)
?? PAS
?? 第 1 頁 / 共 5 頁
字號:

function LoadWinSock2: Boolean;
procedure GetPacketInterceptorList(List: TStringList);

var
  WSACreateEvent: function: THandle stdcall;
  WSAResetEvent: function(hEvent: THandle): Boolean stdcall;
  WSACloseEvent: function(hEvent: THandle): Boolean stdcall;
  WSAEventSelect: function(s: TSocket; hEventObject: THandle; lNetworkEvents: Integer): Integer stdcall;

implementation

uses
  ActiveX, MidConst, RTLConsts, ZLibEx;

var
  hWinSock2: THandle;

{ Utility functions }

procedure CheckSignature(Sig: Integer);
begin
  if (Sig and $FF00 <> CallSig) and
     (Sig and $FF00 <> ResultSig) then
    raise Exception.CreateRes(@SInvalidDataPacket);
end;

function LoadWinSock2: Boolean;
const
  DLLName = 'ws2_32.dll';
begin
  Result := hWinSock2 > 0;
  if Result then Exit;
  hWinSock2 := LoadLibrary(PChar(DLLName));
  Result := hWinSock2 > 0;
  if Result then
  begin
    WSACreateEvent := GetProcAddress(hWinSock2, 'WSACreateEvent');
    WSAResetEvent := GetProcAddress(hWinSock2, 'WSAResetEvent');
    WSACloseEvent := GetProcAddress(hWinSock2, 'WSACloseEvent');
    WSAEventSelect := GetProcAddress(hWinSock2, 'WSAEventSelect');
  end;
end;

procedure GetPacketInterceptorList(List: TStringList);
var
  EnumGUID: IEnumGUID;
  Fetched: Cardinal;
  Guid: TGUID;
  Rslt: HResult;
  CatInfo: ICatInformation;
  I: Integer;
  ClassIDKey: HKey;
  S: string;
  Buffer: array[0..255] of Char;
begin
  List.Clear;
  Rslt := CoCreateInstance(CLSID_StdComponentCategoryMgr, nil,
    CLSCTX_INPROC_SERVER, ICatInformation, CatInfo);
  if Succeeded(Rslt) then
  begin
    OleCheck(CatInfo.EnumClassesOfCategories(1, @CATID_MIDASInterceptor, 0, nil, EnumGUID));
    while EnumGUID.Next(1, Guid, Fetched) = S_OK do
      List.Add(ClassIDToProgID(Guid));
  end else
  begin
    if RegOpenKey(HKEY_CLASSES_ROOT, 'CLSID', ClassIDKey) <> 0 then
      try
        I := 0;
        while RegEnumKey(ClassIDKey, I, Buffer, SizeOf(Buffer)) = 0 do
        begin
          S := Format(SCatImplKey,[Buffer, GUIDToString(CATID_MIDASInterceptor)]);
          List.Add(ClassIDToProgID(StringToGUID(Buffer)));
          Inc(I);
        end;
      finally
        RegCloseKey(ClassIDKey);
      end;
  end;
end;

procedure FreeWinSock2;
begin
  if hWinSock2 > 0 then
  begin
    WSACreateEvent := nil;
    WSAResetEvent := nil;
    WSACloseEvent := nil;
    WSAEventSelect := nil;
    FreeLibrary(hWinSock2);
  end;
  hWinSock2 := 0;
end;

procedure GetDataBrokerList(List: TStringList; const RegCheck: string);

  function OpenRegKey(Key: HKey; const SubKey: string): HKey;
  begin
    if Windows.RegOpenKey(Key, PChar(SubKey), Result) <> 0 then Result := 0;
  end;

  function EnumRegKey(Key: HKey; Index: Integer; var Value: string): Boolean;
  var
    Buffer: array[0..255] of Char;
  begin
    Result := False;
    if Windows.RegEnumKey(Key, Index, Buffer, SizeOf(Buffer)) = 0 then
    begin
      Value := Buffer;
      Result := True;
    end;
  end;

  function QueryRegKey(Key: HKey; const SubKey: string;
    var Value: string): Boolean;
  var
    BufSize: Longint;
    Buffer: array[0..255] of Char;
  begin
    Result := False;
    BufSize := SizeOf(Buffer);
    if Windows.RegQueryValue(Key, PChar(SubKey), Buffer, BufSize) = 0 then
    begin
      Value := Buffer;
      Result := True;
    end;
  end;

  procedure CloseRegKey(Key: HKey);
  begin
    RegCloseKey(Key);
  end;

var
  I: Integer;
  ClassIDKey: HKey;
  ClassID, S: string;
begin
  List.Clear;
  ClassIDKey := OpenRegKey(HKEY_CLASSES_ROOT, 'CLSID');
  if ClassIDKey <> 0 then
    try
      I := 0;
      while EnumRegKey(ClassIDKey, I, ClassID) do
      begin
        if RegCheck <> '' then
        begin
          QueryRegKey(ClassIDKey, ClassID + '\' + RegCheck, S);
          if S <> SFlagOn then continue;
        end;
        if not QueryRegKey(ClassIDKey, ClassID + '\Control', S) and
           QueryRegKey(ClassIDKey, ClassID + '\ProgID', S) and
           QueryRegKey(ClassIDKey, ClassID + '\TypeLib', S) and
           QueryRegKey(ClassIDKey, ClassID + '\Version', S) and
           QueryRegKey(ClassIDKey, ClassID + '\Borland DataBroker', S) then
          List.Add(ClassIDToProgID(StringToGUID(ClassID)));
        Inc(I);
      end;
    finally
      CloseRegKey(ClassIDKey);
    end;
end;

{ TDataBlock }

constructor TDataBlock.Create;
begin
  inherited Create;
  FIgnoreStream := False;
  FStream := TMemoryStream.Create;
  Clear;
end;

destructor TDataBlock.Destroy;
begin
  if not FIgnoreStream then
    FStream.Free;
  inherited Destroy;
end;

{ TDataBlock.IDataBlock }

function TDataBlock.GetBytesReserved: Integer;
begin
  Result := SizeOf(Integer) * 2;
end;

function TDataBlock.GetMemory: Pointer;
var
  DataSize: Integer;
begin
  FStream.Position := 4;
  DataSize := FStream.Size - BytesReserved;
  FStream.Write(DataSize, SizeOf(DataSize));
  Result := FStream.Memory;
end;

function TDataBlock.GetSize: Integer;
begin
  Result := FStream.Size - BytesReserved;
end;

procedure TDataBlock.SetSize(Value: Integer);
begin
  FStream.Size := Value + BytesReserved;
end;

function TDataBlock.GetStream: TStream;
var
  DataSize: Integer;
begin
  FStream.Position := 4;
  DataSize := FStream.Size - BytesReserved;
  FStream.Write(DataSize, SizeOf(DataSize));
  FStream.Position := 0;
  Result := FStream;
end;

function TDataBlock.GetSignature: Integer;
begin
  FStream.Position := 0;
  FStream.Read(Result, SizeOf(Result));
end;

procedure TDataBlock.SetSignature(Value: Integer);
begin
  FStream.Position := 0;
  FStream.Write(Value, SizeOf(Value));
end;

procedure TDataBlock.Clear;
begin
  FStream.Size := BytesReserved;
  FReadPos := BytesReserved;
  FWritePos := BytesReserved;
end;

function TDataBlock.Write(const Buffer; Count: Integer): Integer;
begin
  FStream.Position := FWritePos;
  Result := FStream.Write(Buffer, Count);
  FWritePos := FStream.Position;
end;

function TDataBlock.Read(var Buffer; Count: Integer): Integer;
begin
  FStream.Position := FReadPos;
  Result := FStream.Read(Buffer, Count);
  FReadPos := FStream.Position;
end;

procedure TDataBlock.IgnoreStream;
begin
  FIgnoreStream := True;
end;

function TDataBlock.InitData(Data: Pointer; DataLen: Integer; CheckLen: Boolean): Integer; stdcall;
var
  Sig: Integer;
  P: Pointer;
begin
  P := Data;
  if DataLen < MINDATAPACKETSIZE then
    raise Exception.CreateRes(@SInvalidDataPacket);
  Sig := Integer(P^);
  P := Pointer(Integer(Data) + SizeOf(Sig));
  CheckSignature(Sig);
  Signature := Sig;
  Result := Integer(P^);
  P := Pointer(Integer(P) + SizeOf(Result));
  if CheckLen then
  begin
    if (Result <> DataLen - MINDATAPACKETSIZE) then
      raise Exception.CreateRes(@SInvalidDataPacket);
    Size := Result;
    if Result > 0 then
      Write(P^, Result);
  end else
  begin
    Size := DataLen - MINDATAPACKETSIZE;
    if Size > 0 then
      Write(P^, Size);
  end;
end;

{ TDataBlockInterpreter }

const

  EasyArrayTypes = [varSmallInt, varInteger, varSingle, varDouble, varCurrency,
                    varDate, varBoolean, varShortInt, varByte, varWord, varLongWord];

  VariantSize: array[0..varLongWord] of Word  = (0, 0, SizeOf(SmallInt), SizeOf(Integer),
    SizeOf(Single), SizeOf(Double), SizeOf(Currency), SizeOf(TDateTime), 0, 0,
    SizeOf(Integer), SizeOf(WordBool), 0, 0, 0, 0, SizeOf(ShortInt), SizeOf(Byte),
    SizeOf(Word), SizeOf(LongWord));

constructor TDataBlockInterpreter.Create(SendDataBlock: ISendDataBlock; CheckRegValue: string);
begin
  inherited Create;
  FSendDataBlock := SendDataBlock;
  FDispatchList := TList.Create;
  FCheckRegValue := CheckRegValue;
end;

destructor TDataBlockInterpreter.Destroy;
var
  i: Integer;
begin
  for i := FDispatchList.Count - 1 downto 0 do
    TDataDispatch(FDispatchList[i]).FInterpreter := nil;
  FDispatchList.Free;
  FSendDataBlock := nil;
  inherited Destroy;
end;

procedure TDataBlockInterpreter.AddDispatch(Value: TDataDispatch);
begin
  if FDispatchList.IndexOf(Value) = -1 then
    FDispatchList.Add(Value);
end;

procedure TDataBlockInterpreter.RemoveDispatch(Value: TDataDispatch);
begin
  FDispatchList.Remove(Value);
end;

{ Variant conversion methods }

function TDataBlockInterpreter.GetVariantPointer(const Value: OleVariant): Pointer;
begin
  case VarType(Value) of
    varEmpty, varNull: Result := nil;
    varDispatch: Result := TVarData(Value).VDispatch;
    varVariant: Result := @Value;
    varUnknown: Result := TVarData(Value).VUnknown;
  else
    Result := @TVarData(Value).VPointer;
  end;
end;

procedure TDataBlockInterpreter.CopyDataByRef(const Source: TVarData; var Dest: TVarData);
var
  VType: Integer;
begin
  VType := Source.VType;
  if Source.VType and varArray = varArray then
  begin
    VarClear(OleVariant(Dest));
    SafeArrayCheck(SafeArrayCopy(PSafeArray(Source.VArray), PSafeArray(Dest.VArray)));
  end else
    case Source.VType and varTypeMask of
      varEmpty, varNull: ;
      varOleStr:
      begin
        if (Dest.VType and varTypeMask) <> varOleStr then
          Dest.VOleStr := SysAllocString(Source.VOleStr)
        else if (Dest.VType and varByRef) = varByRef then
          SysReallocString(PBStr(Dest.VOleStr)^,Source.VOleStr)
        else
          SysReallocString(Dest.VOleStr,Source.VOleStr);
      end;
      varDispatch: Dest.VDispatch := Source.VDispatch;
      varVariant: CopyDataByRef(PVarData(Source.VPointer)^, Dest);
      varUnknown: Dest.VUnknown := Source.VUnknown;
    else
      if Dest.VType = 0 then
        OleVariant(Dest) := OleVariant(Source)
      else if Dest.VType and varByRef = varByRef then
      begin
        VType := VType or varByRef;
        Move(Source.VPointer, Dest.VPointer^, VariantSize[Source.VType and varTypeMask]);
      end
      else
        Move(Source.VPointer, Dest.VPointer, VariantSize[Source.VType and varTypeMask]);
    end;
  Dest.VType := VType;
end;

function TDataBlockInterpreter.ReadArray(VType: Integer;
  const Data: IDataBlock): OleVariant;
var
  Flags: TVarFlags;
  LoDim, HiDim, Indices, Bounds: PIntArray;
  DimCount, VSize, i: Integer;
  {P: Pointer;}
  V: OleVariant;
  LSafeArray: PSafeArray;
  P: Pointer;
begin
  VarClear(Result);
  Data.Read(DimCount, SizeOf(DimCount));
  VSize := DimCount * SizeOf(Integer);
  GetMem(LoDim, VSize);
  try
    GetMem(HiDim, VSize);
    try
      Data.Read(LoDim^, VSize);
      Data.Read(HiDim^, VSize);
      GetMem(Bounds, VSize * 2);
      try
        for i := 0 to DimCount - 1 do
        begin
          Bounds[i * 2] := LoDim[i];
          Bounds[i * 2 + 1] := HiDim[i];
        end;
        Result := VarArrayCreate(Slice(Bounds^,DimCount * 2), VType and varTypeMask);
      finally
        FreeMem(Bounds);
      end;
      if VType and varTypeMask in EasyArrayTypes then
      begin
        Data.Read(VSize, SizeOf(VSize));
        P := VarArrayLock(Result);
        try
          Data.Read(P^, VSize);
        finally
          VarArrayUnlock(Result);
        end;
      end else
      begin
        LSafeArray := PSafeArray(TVarData(Result).VArray);
        GetMem(Indices, VSize);
        try
          FillChar(Indices^, VSize, 0);
          for I := 0 to DimCount - 1 do
            Indices[I] := LoDim[I];
          while True do
          begin
            V := ReadVariant(Flags, Data);
            if VType and varTypeMask = varVariant then
              SafeArrayCheck(SafeArrayPutElement(LSafeArray, Indices^, V))

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品影院| 国产精品视频麻豆| 水蜜桃久久夜色精品一区的特点| 在线精品视频小说1| 亚洲综合清纯丝袜自拍| 欧美精品自拍偷拍| 久久精品国产免费| 欧美国产日韩在线观看| 91在线视频18| 亚洲电影中文字幕在线观看| 日韩一区二区影院| 国产精品18久久久久久久久| 《视频一区视频二区| 欧美午夜影院一区| 久久综合综合久久综合| 国产女人aaa级久久久级| 色视频成人在线观看免| 爽好久久久欧美精品| 久久久久久亚洲综合影院红桃 | 亚洲午夜精品久久久久久久久| 欧洲中文字幕精品| 麻豆成人免费电影| 国产精品久久久久毛片软件| 欧美性受xxxx| 国产在线看一区| 综合中文字幕亚洲| 欧美人xxxx| 国产成人精品免费在线| 亚洲动漫第一页| 久久精品视频在线看| 色菇凉天天综合网| 精品一二三四区| 亚洲最大的成人av| 国产清纯白嫩初高生在线观看91 | 欧美日韩一区二区欧美激情| 国产米奇在线777精品观看| 亚洲乱码国产乱码精品精98午夜 | 亚洲综合自拍偷拍| 欧美精品一区二区精品网| 色婷婷一区二区三区四区| 久久精品国产一区二区三| 亚洲黄色尤物视频| 精品盗摄一区二区三区| 欧日韩精品视频| 成人蜜臀av电影| 麻豆91小视频| 亚洲成人激情综合网| 国产精品久久久久婷婷| 精品精品国产高清一毛片一天堂| 色94色欧美sute亚洲线路一ni| 国产精品综合久久| 秋霞影院一区二区| 亚洲国产wwwccc36天堂| 国产精品久久久久久亚洲毛片| 精品国产乱码久久久久久免费| 欧美综合色免费| 91女人视频在线观看| 国产999精品久久久久久绿帽| 六月丁香综合在线视频| 日韩黄色免费电影| 一区二区三区在线免费观看| 国产精品久久久久精k8 | 成人av资源在线观看| 精品午夜一区二区三区在线观看| 日韩高清一区二区| 亚洲18女电影在线观看| 亚洲最快最全在线视频| 伊人婷婷欧美激情| 亚洲免费在线观看| 亚洲欧美日韩中文字幕一区二区三区 | 欧美三级电影在线看| 色综合天天综合| av在线播放一区二区三区| 国产精品自拍在线| 国产揄拍国内精品对白| 精品亚洲aⅴ乱码一区二区三区| 欧美a级理论片| 麻豆视频一区二区| 久久66热偷产精品| 精品制服美女久久| 国产精品18久久久久| 国产精品18久久久| 成人黄色777网| 成人精品在线视频观看| 91毛片在线观看| 91黄色在线观看| 欧美日韩在线亚洲一区蜜芽| 欧美日韩色一区| 欧美一区二区三区日韩| 日韩美女视频在线| 国产亚洲婷婷免费| 欧美国产一区二区| 一区二区免费视频| 午夜国产精品一区| 国产综合色视频| av电影在线观看不卡| 欧洲一区二区三区在线| 欧美丰满美乳xxx高潮www| 日韩欧美高清在线| 国产蜜臀97一区二区三区| 亚洲麻豆国产自偷在线| 亚洲第一久久影院| 国产曰批免费观看久久久| 成人午夜av在线| 欧美性videosxxxxx| 日韩免费看的电影| 国产精品成人在线观看| 五月激情综合网| 国产毛片精品视频| 色成人在线视频| 日韩欧美色综合网站| 中文字幕在线不卡视频| 日日摸夜夜添夜夜添精品视频| 国产在线麻豆精品观看| 色偷偷88欧美精品久久久| 欧美一区二区黄| 国产精品国产三级国产| 强制捆绑调教一区二区| 成人免费精品视频| 欧美一区二区三区啪啪| 亚洲欧洲性图库| 久久国产欧美日韩精品| 99精品久久99久久久久| 日韩欧美精品在线视频| 一区二区三区四区亚洲| 国产精品影视天天线| 欧美日韩一二三区| 国产精品无人区| 久久精品国产99国产| 色域天天综合网| 久久久国产精品不卡| 肉肉av福利一精品导航| 99精品视频在线观看| 精品免费一区二区三区| 一区二区三区在线不卡| 韩国在线一区二区| 9191国产精品| 亚洲黄色片在线观看| 成人免费毛片嘿嘿连载视频| 欧美酷刑日本凌虐凌虐| 亚洲色图制服诱惑| 激情综合色丁香一区二区| 91丨九色丨尤物| 中文字幕欧美激情一区| 国产资源在线一区| 欧美一级片免费看| 亚洲国产成人tv| 91在线国产福利| 国产色产综合色产在线视频| 蜜桃视频免费观看一区| 欧美日韩国产精品成人| 亚洲女与黑人做爰| av欧美精品.com| 国产亚洲短视频| 国产精品资源站在线| 欧美一级久久久久久久大片| 亚洲一二三区在线观看| 91社区在线播放| 国产精品亲子伦对白| 欧美色综合网站| 亚洲裸体xxx| 99久久亚洲一区二区三区青草| 国产欧美日韩不卡| 国产一区二区三区免费播放| 欧美精品一区二区三区视频| 久久99精品久久久久婷婷| 日韩区在线观看| 极品少妇xxxx精品少妇偷拍| 日韩一区二区三区精品视频 | 欧美精品自拍偷拍动漫精品| 亚洲一区在线免费观看| 欧美综合久久久| 亚洲午夜久久久| 欧美日韩高清一区二区不卡| 五月婷婷激情综合| 日韩欧美高清一区| 久色婷婷小香蕉久久| 久久久综合精品| 国产91在线看| 亚洲欧美一区二区三区国产精品| 一本色道久久综合精品竹菊| 亚洲午夜影视影院在线观看| 91精品国产综合久久久久| 蜜桃精品视频在线| 国产三级精品视频| 91视视频在线观看入口直接观看www | 欧美最新大片在线看| 亚洲成人你懂的| 精品国产免费一区二区三区香蕉 | 91色综合久久久久婷婷| 亚洲综合一区二区三区| 91精品国产综合久久香蕉麻豆| 久久精品国产成人一区二区三区| 精品不卡在线视频| 成人av第一页| 亚洲午夜久久久久| 精品国产一区二区三区不卡| av中文字幕在线不卡| 爽好多水快深点欧美视频| 久久久久久久久久久久电影 |