您的位置:68399皇家赌场 > 虚拟主机 > 无需付费短信平台函数表达

无需付费短信平台函数表达

发布时间:2019-08-17 18:36编辑:虚拟主机浏览(169)

    图片 1

    var
    pplayer: PlayerInfo; {那几个将会已指针的秘技传送给线程, 它应当是全局的}
    T_伊夫nt: Cardinal = 0; //事件内核

    treeview 右键选中
    procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      TreeNode: TTreeNode;
      l_lPARAM: LPARAM;
    begin
      if Button <> mbRight then Exit;
      TreeNode := TreeView1.GetNodeAt(x, y);
      if TreeNode <> nil then
      begin
        TreeView1.Selected := TreeNode;
        l_Lparam := x (y shl 16);
        sendmessage(Treeview1.Handle, WM_LBUTTONDOWN, MK_LBUTTON, L_lparam);
        sendmessage(Treeview1.Handle, WM_LBUTTONUP, MK_LBUTTON, L_lparam);
      end;

    function GetSmsParams(var SendSmsCnt, HaveNotSendCnt, ReciveSmsCnt,
    HaveNotReadSmsCnt: integer): integer; stdcall;
    函数表明:
    取得平台的连带参数
    参数表明:
    SendSmsCnt 发件箱的总短信数
    HaveNotSendCnt 未发的短信数量
    ReciveSmsCnt 收件箱中已收到短信的数目
    HaveNotReadSmsCnt 未读短信的数额

    end;

    五、send函数
    int send(
    SOCKET s,
    const char FAR *buf,
    int len,
    int flags
    );
    不 论是客户依旧服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送需要,而服务器则平常用send函 数来向客户程序发送应答。该函数的第贰个参数钦点发送端套接字描述符;第二个参数指明一(Wissu)个寄放应用程序要发送数据的缓冲区;第三个参数指明实际要发送的数 据的字节数;第多少个参数一般置0。这里只描述同步Socket的send函数的试行流程。当调用该函数时,send先相比较待发送数据的长短len和套接字 s的发送缓冲区的长短,若是len大于s的发送缓冲区的长度,该函数再次回到SOCKET_E途锐RO大切诺基;就算len小于只怕等于s的发送缓冲区的尺寸,那么 send先检查协议是还是不是正在发送s的发送缓冲中的数据,假设是就等候协议把数量发送完,假若协议还未曾起来发送s的出殡和埋葬缓冲中的数据也许s的发送缓冲中未有数量,那么send就比较s的发送缓冲区的多余空间和len,若是len大于剩余空间大小send就径直守候协议把s的发送缓冲中的数据发送完,借使len小于剩余空间大小send就独自把buf中的数据copy到剩余空间里(注意并不是send把s的发送缓冲中的数据传到连接的另一端的,而是协议传 的,send仅仅是把buf中的数据copy到s的发送缓冲区的结余空间里)。即便send函数copy数据成功,就回来实际copy的字节数,假若send在copy数据时出现错误,那么send就赶回SOCKET_E安德拉ROSportage;如若send在等待协议传送数据时互连网断开的话,那么send函数也再次回到SOCKET_E翼虎RO汉兰达。要留心send函数把buf中的数据成功copy到s的发送缓冲的多余空间里后它就回去了,不过此时这一个多少并不一定立刻被 传到三番五次的另一端。假诺协议在一而再的传递进度中现身互联网错误的话,那么下贰个Socket函数就能够回到SOCKET_EEnclaveRO奥德赛。(每多少个除send外的 Socket函数在实行的最初步总要先等待套接字的出殡和埋葬缓冲中的数据被协议传送实现技术承接,借使在伺机时出现网络错误,那么该Socket函数就回到 SOCKET_ERROR)
    细心:在Unix系统下,如若send在等待协议传送数据时网络断开的话,调用send的进度会收下到二个SIGPIPE复信号,进度对该非确定性信号的暗中同意管理是经过终止。

    function CreateIniDb: integer; stdcall;
    函数表明:
    初叶化平台的后台数据库脚本

    gameh, childhwnd, filehwnd: int64;
    TextFile: TStringList;
    filepath: string;
    Curp: PlayerInfo; {因为指针参数给的点每二17日都在变, 需用线程的部分变量存起来}
    //有时变量
    ID: pchar;
    GameHwnd: int64; //游戏句柄
    ClientHwnd: int64; //dll的窗体句柄
    Account: pchar; //账号
    PassWord: pchar; //密码
    RealmName_1: pchar; //服务器
    RealmName_2: pchar;
    playername:pchar;
    Team:pchar;//队伍
    Task:pchar;//功能
    CmdCode:pchar;
    Gamepath:pchar;
    begin
    EnterCriticalSection; //进入临界区
    try
    result := False;
    Curp := pPlayerInfo^;

    implementation

    荒唐表明
    0 成功
    -1 连接短信平台破产
    -2 命令施行停业
    -3 无可读短信

    type
    PlayerInfo = record //客户端消息
    ID: pchar;
    GameHwnd: int64; //游戏句柄
    ClientHwnd: int64; //dll的窗体句柄
    Account: pchar; //账号
    PassWord: pchar; //密码
    RealmName_1: pchar; //服务器
    RealmName_2: pchar;
    playername:pchar;
    Team:pchar;//队伍
    Task:pchar;//功能
    CmdCode:pchar;
    Gamepath:pchar;
    end;
    pplayerinfo = ^playerinfo;

      // free those buffers
      freemem(pipe); freemem(pdata); freemem(preqdata);

    function SendASms(aPhone, aContent, aremark: pchar): integer; stdcall;
    函数表明:
    写短信到平台的后台数据库
    参数表明:
    aPhone 接收短信的人
    aContent 短信的剧情
    aremark 备注

    function LoginGame(ptr: pointer): boolean; stdcall;
    //登入游戏的线程
    var

    DWORD GetTempPath(DWORD nBufferLength, LPTSTR lpBuffer);

     

    procedure TFormMain.Button1Click(Sender: TObject);
    var
    i: integer;
    num: integer;
    UserIni: TIniFile;
    list: tstringlist;
    filepath: string;
    sr: TSearchRec;
    Section, Key: string; { 分别代表 ini 文件的小节与根本字 }
    begin
    filepath := ExtractFilePath(Application.ExeName);
    filepath := filepath '区组新闻.ini';
    if not fileExists then
    begin
    MessageBox(Handle, '服务器列表文件错过', '错误消息', 0);
    Exit;
    end;
    for i := 0 to FormMain.listview1.Items.Count - 1 do
    begin
    if FormMain.ListView1.Items[i].Checked = True then
    begin
    num := StrToInt(FormMain.ListView1.Items[i].Caption);
    pplayer.ID := pchar(inttostr;
    pplayer.GameHwnd := 0;
    pplayer.ClientHwnd := self.Handle;
    pplayer.Account := pchar(FormMain.ListView1.Items[i].SubItems[0]);
    pplayer.PassWord := pchar(FormMain.ListView1.Items[i].SubItems[1]);
    pplayer.RealmName_1 := pchar(FormMain.ListView1.Items[i].SubItems[2]);
    pplayer.RealmName_2 := pchar(FormMain.ListView1.Items[i].SubItems[3]);
    pplayer.playername := pchar(FormMain.ListView1.Items[i].SubItems[4]);
    pplayer.Team:= pchar(FormMain.ListView1.Items[i].SubItems[5]);
    pplayer.task:= pchar(FormMain.ListView1.Items[i].SubItems[9]);
    pplayer.Gamepath:=pchar(formmain.Edit游戏路线.text);
    //依据服务器列表设置
    UserIni := TIniFile.Create;
    // 推断文件大小
    if FindFirst(filepath, faAnyFile, sr) = 0 then
    begin
    if sr.size > 0 then
    begin
    // 要是文件不为空
    section:='DES';
    key:=pplayer.RealmName_1;
    pplayer.CmdCode:=pchar(userini.ReadString(section,key,''));

    关闭外界应用程序
    哪些在 Delphi 应用程序中, 去关闭外界已张开的应用程序?
    下边给出一段在 Delphi 中关闭"总结器"程序为例:
    var
    HWndCalculator : HWnd;
    begin
    // find the exist calculator window
    HWndCalculator := Winprocs.FindWindow(nil, '计算器'); // close the exist Calculator
    if HWndCalculator <> 0 then
    SendMessage(HWndCalculator, WM_CLOSE, 0, 0);
    end;

    此短信平台,接济法国wavecom短信猫.有VB及DELPHI示例程序

    i, c: Integer;
    num: integer; //ID
    hmodule: thandle;

        // finally send the packet
      fillchar(ipopt, sizeof(ipopt), 0);
      ipopt.ttl := 64;
      npkts := icmpsendecho(hicmp, address, preqdata, size,
                            @ipopt, pipe, buffersize, timeout);
      if npkts = 0 then result:=false;

     

     end else begin MessageBox(Handle, '服务器列表文件丢失', '错误信息', 0); FindClose; if UserIni <> nil then begin UserIni.Free; UserIni := nil; end; Exit; end; end; //关闭由FindFirstFile函数创建的一个搜索句柄 FindClose; if UserIni <> nil then begin UserIni.Free; UserIni := nil; end; hthread := createthread(nil, 0, @LoginGame, @pplayer, 0, threadid); if WaitForSingleObject(T_Event, INFINITE) = WAIT_OBJECT_0 then ResetEvent; //设置为未触发 CloseHandle; end;end;
    

    {=================================================================
      功  能: 重返网络中sqlserver列表
      参  数:
              list: 须求填写的list
      返回值: 成功:  true,并填充list  失败 false
      备 注:
      版 本:
        1.0  2002/10/02 22:44:00
    =================================================================}
    function getsqlserverlist(var list: tstringlist): boolean;
    var
       i: integer;
       sretvalue: string;
       sqlserver: variant;
       serverlist: variant;
    begin
      result := false;
      list.clear;
      try
        sqlserver := createoleobject('sqldmo.application');
        serverlist := sqlserver.listavailablesqlservers;
        for i := 1 to serverlist.count do
          list.add (serverlist.item(i));
        result := true;
      finally
        sqlserver := null;
        serverlist := null;
      end;
    end;

    function ReadASms(var aPhone, aContent, aSendDateTime: pchar): integer; stdcall;
    函数表明:
    从平台的后台数据库中读取一条未读短信
    参数表明:
    aPhone 发送短信的人
    aContent 短信的剧情
    aSendDateTime 短信发送的光阴

    except
    result := false;
    ExitThread;
    end;

    备注:不经常目录的规定规范:
    1,借使有TMP情状变量则一时目录为TMP钦点的目录
    2,如果未有TMP情状变量而有TEMP碰着变量,则为TEMP变量内定的目录
    3,借使TMP和TEMP都不曾定义,则取当前目录为临时目录

    function ConnectToServer(aServerName, aLogID, aPass: pchar): integer; stdcall;
    函数表明:
    连接平台的后台数据库
    参数表明:
    aServerName 平台的后台数据库所在的服务器名称
    aLogID 登入数据库服务器所需的用户名
    aPass 登入数据库服务器所需的密码

    delphi断点无效,自动跳过代码
    //定义

    interface
    const
      c_err_getlocalip       = '获取本地ip失利';
      c_err_getnamebyipaddr  = '获取主机名失利';
      c_err_getsqlserverlist = '获取sqlserver服务器战败';
      c_err_getuserresource  = '获取分享资战败';
      c_err_getgrouplist     = '获取具有工作组失利';
      c_err_getgroupusers    = '获取专门的工作组中有所计算机战败';
      c_err_getnetlist       = '获取具备网络项目失利';
      c_err_checknet         = '互连网不通';
      c_err_checkattachnet   = '未登陆网络';
      c_err_internetconnected ='未有上网';
     
      c_txt_checknetsuccess  = '网络畅通';
      c_txt_checkattachnetsuccess = '已登录互联网';
      c_txt_internetconnected ='上网了';

    function DisConnectToServer: integer; stdcall;
    函数表达:
    断开平台的后台数据库连接

    //这里开头往下断点无效,会活动跳过
    ID:=Curp.ID; //那么些createthread传递进入的结构体,参数多了,传递的值会出错
    ClientHwnd:=Curp.ClientHwnd;
    Account:=Curp.Account;
    PassWord:=Curp.PassWord;
    RealmName_1:=Curp.RealmName_1;
    RealmName_2:=Curp.RealmName_2;
    playername:=Curp.playername;
    Team:=Curp.Team;
    task:=Curp.Task;
    //直到此处能够下断点,中间这一块全体跳过
    cmdcode:=Curp.CmdCode;
    Gamepath:=Curp.Gamepath;
    Set伊夫nt; //设置触发
    filepath := Gamepath 'dataconfig.ini';
    if FileExists then
    begin
    //如若文件存在,则开始展览修改和增添
    TextFile := TStringList.Create;
    TextFile.LoadFromFile;
    for I := 0 to TextFile.Count - 1 do
    begin
    if Pos('SaveAccount', TextFile[i]) > 0 then
    begin
    TextFile.Delete;
    TextFile.Insert(i, 'SaveAccount = ' '0');
    end;
    end;
    TextFile.SaveToFile;
    if TextFile <> nil then
    begin
    TextFile.Free;
    TextFile := nil;
    end;
    end;
    //参数一:进程路径
    //参数二:命令行
    //参数八:子进度专业门路
    if createprocess(pchar(gamepath 'asktao.mod'),
    pChar('des:' CmdCode),
    nil, nil, False,
    0,
    nil, gamepath, StartupInfo, ProcessInfo) then
    begin
    gameh := GetHwndFromProcess(ProcessInfo.dwProcessId);
    for c := 0 to 60 do
    begin
    if gameh = 0 then
    begin
    Sleep;
    gameh := GetHwndFromProcess(ProcessInfo.dwProcessId);
    end
    else
    break;
    end;
    end;
    if gameh > 0 then
    begin
    if KeyHook then
    FormMain.Memo1.Lines.Add('dll安装成功');
    //安装完毕后,客户端窗体会创设叁个DLL窗体,类名字为Tform1
    //遍历全部进度,跟进度ID同样,并且窗体类名字为Tform1
    //则意味dll窗体伊始化成功,能够发送Data告诉她去登录
    for c := 0 to 30 do
    begin
    childhwnd := GetChildwindows(ProcessInfo.dwProcessId);
    if childhwnd > 0 then
    begin
    Break;
    end
    else
    Sleep;
    end;
    //成功创造窗口,能够起来发送数据,并让她初始活动登入
    //假设child窗口为0,则代表登录失利,也许creatprocess开首是循环
    //退步了重新再开一个窗口,记得关闭那一个窗口

    收获程序的不二等秘书诀
     ExtractFileDir(Application.Exename);

    end;

    得到WINDOWS的SYSTEM路径:
       方法:
                var
                     MySysPath : PCHAR ;
                begin
                        GetMem(MySysPath,255);
                        GetSystemDirectory(MySysPath,255);
                end;
       注:MySysPath为SYSTEM路径

    end;result := True;Isloading := false;LeaveCriticalSection; //离开临界区ExitThread;
    

    ◇[DELPHI]更改函数的概念及表达
    datetimetofiledate (datetime:Tdatetime):longint; 将Tdatetime格式的日虎时间值调换来DOS格式的日辰时间值
    datetimetostr (datetime:Tdatetime):string; 将Tdatatime格式变量调换来字符串,假诺datetime参数不含有日期值,重临字符串日期显示成为00/00/00,借使datetime参数 中没一时间值,重临字符串中的时间有个别显得成为00:00:00 AM
    datetimetostring (var result string;
    const format:string;
    datetime:Tdatetime); 依据给定的格式字符串调换时间和日期值,result为结果字符串,format为转移格式字符串,datetime为日期时间值
    datetostr (date:Tdatetime) 使用shortdateformat全局变量定义的格式字符串将date参数转变来对应的字符串
    floattodecimal (var result:Tfloatrec;value:
    extended;precision,decimals:
    integer); 将浮点数转变到十进制表示
    floattostr (value:extended):string 将浮点数value转变到字符串格式,该转变使用普通数字格式,转变的有效位数为15人。
    floattotext (buffer:pchar;value:extended;
    format:Tfloatformat;precision,
    digits:integer):integer; 用给定的格式、精度和小数将浮点值value转变来十进制表示形式,转变结果贮存于buffer参数中,函数再次来到值为存款和储蓄到buffer中的字符位数,buffer是非0结果的字符串缓冲区。
    floattotextfmt (buffer:pchar;value:extended;
    format:pchar):integer 用给定的格式将浮点值value转换来十进制表示方式,转换结果寄放于buffer参数中,函数重回值为存款和储蓄到buffer中的字符位数。
    inttohex (value:longint;digits:integer):
    string; 将给定的数值value转变来十六进制的字符串。参数digits给出调换结果字符串满含的数字位数。
    inttostr (value:longint):string 将整数调换到十进制情势字符串
    strtodate (const S:string):Tdatetime 将字符串转变到日期值,S必须包罗三个官方的格式日期的字符串。
    strtodatetime (const S:string):Tdatetime 将字符串S转产生日期时间格式,S必须具备MM/DD/YY HH:MM:SS[AM|PM]格式,当中国和扶桑期和时间相隔符与系统时代时间常量设置相关。若无钦定AM或PM音信,表示使用24小时制。
    strtofloat (const S:string):extended; 将给定的字符串调换来浮点数,字符串具有如下格式:
    [ |-]nnn…[.]nnn…[< |-><E|e>< |->nnnn]
    strtoint (const S:string):longint 将数字字符串转变到整数,字符串能够是十进制或十六进制格式,假设字符串不是四个法定的数字字符串,系统产生ECONVERTE瑞虎ROCRUISER极度
    strtointdef (const S:string;default:
    longint):longint; 将字符串S转变到数字,假设不能够将S调换来数字,strtointdef函数重返参数default的值。
    strtotime (const S:string):Tdatetime 将字符串S调换来TDATETIME值,S具备HH:MM:SS[AM|PM]格式,实际的格式与系统的时光相关的全局变量有关。
    timetostr (time:Tdatetime):string; 将参数TIME转换成字符串。调换结果字符串的格式与系统的小时相关常量的安装有关。

    不晓得怎么,logingame线程,传递的自定义结构体参数过多,会传送不正确,並且当中有注释的地点会断点无效,运转起来会活动跳过这段代码,求大神解救,谢谢。。

    //十进制调换为二进制字符串  [重写:Jey]
    function inttoBin(i: integer): string;
    begin
     while i <>0 do
     begin              //i mod 2取模,再使用format格式化
       result:=Format('%d' result,[i mod 2]);
       i:=i div 2
     end
    end;
    //二进制(S)-->>十进制(D)    [重写:Jey]
    uses Math;
    function hextoint(s: string): Double;
    begin
      while Length(s) <>0 do
      begin              //2^(长度-1)次方
        if s[1]='1' then  Result:=Result power(2,Length(s)-1);
        s:=Copy(s,2,Length(s));
      end
    end;
    //十进制(I)-->>十六进制(S)
    //D自带函数,Digits长度,一般设4.
    function IntToHex(Value: Integer; Digits: Integer): string;

    installkeyProc: function(hwindow: hwnd): boolean;
    gamehprocess, module: Cardinal;

      //获得本机的局域网ip地址
      function getlocalip(var localip:string): boolean;
      //通过ip再次来到机器名
      function getnamebyipaddr(ipaddr: string; var macname: string): boolean ;
      //获取网络中sqlserver列表
      function getsqlserverlist(var list: tstringlist): boolean;
      //获取网络中的全数网络项目
      function getnetlist(var list: tstringlist): boolean;
      //获取互连网中的职业组
      function getgrouplist(var list: tstringlist): boolean;
      //获取工作组中负有计算机
      function getusers(groupname: string; var list: tstringlist): boolean;
      //获取网络中的能源
      function getuserresource(ipaddr: string; var list: tstringlist): boolean;
      //映射网络驱动器
      function netaddconnection(netpath: pchar; password: pchar;localpath: pchar): boolean;
      //质量评定网络状态
      function checknet(ipaddr:string): boolean;
      //检查评定机器是还是不是登入网络
      function checkmacattachnet: boolean;

    interface
      uses
          sysutils
         ,windows
         ,dialogs
         ,winsock
         ,classes
         ,comobj
         ,wininet;

    {=================================================================
      功  能: 列举工作组中全数的计算机
      参  数:
              list: 必要填写的list
      返回值: 成功:  true,并填充list 失败: false;
      备  注:
      版  本:
         1.0  2002/10/03 08:00:00
    =================================================================}
    function getusers(groupname: string; var list: tstringlist): boolean;
    type
      tnetresourcearray = ^tnetresource;//互联网类型的数组
    var
      i: integer;
      buf: pointer;
      temp: tnetresourcearray;
      lphenum: thandle;
      netresource: tnetresource;
      count,bufsize,res: dword;
    begin
      result := false;
      list.clear;
      fillchar(netresource, sizeof(netresource), 0);//开首化网络档案的次序消息
      netresource.lpremotename := @groupname[1];//钦定工作组名称
      netresource.dwdisplaytype := resourcedisplaytype_server;//类型为服务器(职业组)
      netresource.dwusage := resourceusage_container;
      netresource.dwscope := resourcetype_disk;//列举文件资讯
      //获取钦赐职业组的互连网能源句柄
      res := wnetopenenum( resource_globalnet, resourcetype_disk,
                            resourceusage_container, @netresource,lphenum);
      if res <> no_error then exit; //实践失败
      while true do//列举钦定职业组的网络财富
      begin
        count := $ffffffff;//不限能源数量
        bufsize := 8192;//缓冲区大大小小设置为8k
        getmem(buf, bufsize);//申请内部存款和储蓄器,用于获取职业组音信
        //获取Computer名称
        res := wnetenumresource(lphenum, count, pointer(buf), bufsize);
        if res = error_no_more_items then break;//财富列举实现
        if (res <> no_error) then exit;//实行破产
        temp := tnetresourcearray(buf);
        for i := 0 to count - 1 do//列举职业组的微管理器名称
        begin
          //获取专门的职业组的计算机名称, 2表示删除"\",如\wangfajun=>wangfajun
          list.add(temp^.lpremotename 2);
          inc(temp);
        end;
      end;
      res := wnetcloseenum(lphenum);//关闭一遍列举
      if res <> no_error then exit;//执行倒闭
      result := true;
      freemem(buf);
    end;

    {=================================================================
      功  能: 通过ip重临机器名
      参  数:
              ipaddr: 想要得到名字的ip
      返回值: 成功:  机器名   失败:  ''
      备 注:
        inet_addr function converts a string containing an internet
        protocol dotted address into an in_addr.
      版 本:
        1.0  2002/10/02 22:09:00
    =================================================================}
    function getnamebyipaddr(ipaddr : string;var macname:string): boolean;
    var
      sockaddrin: tsockaddrin;
      hostent: phostent;
      wsadata: twsadata;
    begin
      result := false;
      if ipaddr = '' then exit;
      try
        wsastartup(2, wsadata);
        sockaddrin.sin_addr.s_addr := inet_addr(pchar(ipaddr));
        hostent := gethostbyaddr(@sockaddrin.sin_addr.s_addr, 4, af_inet);
        if hostent <> nil then
          macname := strpas(hostent^.h_name);
        result := true;
      finally
        wsacleanup;
      end;
    end;

    {=================================================================
      功  能:  检验Computer是或不是上网
      参  数:  无
      返回值:  成功:  true  失败: false;
      备 注:   uses wininet
      版 本:
         1.0  2002/10/07 13:33:00
    =================================================================}
    function internetconnected: boolean;
    const
      // local system uses a modem to connect to the internet.
      internet_connection_modem      = 1;
      // local system uses a local area network to connect to the internet.
      internet_connection_lan        = 2;
      // local system uses a proxy server to connect to the internet.
      internet_connection_proxy      = 4;
      // local system's modem is busy with a non-internet connection.
      internet_connection_modem_busy = 8;
    var
      dwconnectiontypes : dword;
    begin
      dwconnectiontypes := internet_connection_modem internet_connection_lan
      internet_connection_proxy;
      result := internetgetconnectedstate(@dwconnectiontypes, 0);
    end;

    // --------------------------------------------------------------
      icmpclosehandle(hicmp);
      freelibrary(hicmplib);
      // free winsock
      if wsacleanup <> 0 then result:=false;
    end;

    function GetTempDirectory: String;
    var
    TempDir: array[0..255] of Char;
    begin
    GetTempPath(255, @TempDir);
    Result := StrPas(TempDir);
    end;

    end.
    //错误消息常量
    unit head;

    本文由68399皇家赌场发布于虚拟主机,转载请注明出处:无需付费短信平台函数表达

    关键词: 68399皇家赌场 线程 断点 跳过 代码

上一篇:SQL Server二零一六 原生补助JSON

下一篇:没有了