⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sgip_api.dpr

📁 SPIG1.1.rar SPIG接口协议
💻 DPR
📖 第 1 页 / 共 2 页
字号:
  if Source='' then Exit;
  t:='';
  for i:=1 to Length(Source) do
    begin
      case Source[i] of
        '0': t:=t+'0000';
        '1': t:=t+'0001';
        '2': t:=t+'0010';
        '3': t:=t+'0011';
        '4': t:=t+'0100';
        '5': t:=t+'0101';
        '6': t:=t+'0110';
        '7': t:=t+'0111';
        '8': t:=t+'1000';
        '9': t:=t+'1001';
        'a','A': t:=t+'1010';
        'b','B': t:=t+'1011';
        'c','C': t:=t+'1100';
        'd','D': t:=t+'1101';
        'e','E': t:=t+'1110';
        'f','F': t:=t+'1111';
      end;
    end;
  while t[1]='0' do
    t:=Copy(t,2,Length(t)-1);
  Result:=t;
end;

{ 二进制字符串转换到十进制整数字符串 }
function BinToInt(Source:string):string;stdcall;
var
  m,i,j,k:integer;
  Rs,Rt:string;
begin
  Result:='';
  Rs:='0';
  Rt:='0';
  m:=1;
  for i:=Length(Source) downto 1 do
    begin
      // 计算2的N次方
      for j:=Length(Rs) downto 1 do
        begin
          k:=StrToInt(Rs[j])*2+m;
          if k<10
            then m:=0
            else begin
              m:=1;
              k:=k-10;
            end;
          Rs[j]:=IntToStr(k)[1];
        end;
      if m=1
        then begin
          Rs:='1'+Rs;
          m:=0;
        end;
      // 计算结果
      if Source[i]='1'
        then begin
          m:=0;
          // 按位累加结果
          for j:=Length(Rt) downto 1 do
            begin
              k:=StrToInt(Rt[j])+StrToInt(Rs[Length(Rs)-Length(Rt)+j])+m;
              if k<10
                then m:=0
                else begin
                  m:=1;
                  k:=k-10;
                end;
              Rt[j]:=IntToStr(k)[1];
            end;
            // 累加高位
            if Length(Rs)>Length(Rt)
              then begin
                for j:=(Length(Rs)-Length(Rt)) downto 1 do
                  begin
                    k:=StrToInt(Rs[j])+m;
                    if k<10
                      then m:=0
                      else begin
                        m:=1;
                        k:=k-10;
                      end;
                    Rt:=IntToStr(k)[1]+Rt;
                  end;
              end
              else begin
                if m=1
                  then begin
                    Rt:='1'+Rt;
                    m:=0;
                  end;
              end;
        end;
    end;
  Result:=Rt;
end;

{ UNICODE到ASCII }
function UnicodeToStr(Source:string ):string;
var
  i:Integer;
  Ptr:PWideChar;
  Tmp:Word;
begin
  Ptr:=SysAllocStringLen(nil,Length(Source) div 4);
  try
    for i := 0 to (Length(Source) div 4) - 1 do
      begin
        Tmp:=StrToInt('$'+Copy(Source, i*4+1, 4));
        Tmp:=MakeWord(LoByte(Tmp),HiByte(Tmp));
        PWordArray(Ptr)[i]:=Tmp;
      end;
    Result:=OleStrToString(Ptr);
  finally
    SysFreeString(Ptr);
  end;
end;

{ ASCII到UNICODE }
function StrToUnicode(Source:string ):string;
var
  i,k:integer;
  StrHex:string;
  Str:WideString;
  Buf:array[0..399] of WideChar;
begin
  FillChar(Buf,400,0);
  Str:=Source;
  k:=Length(Str);
  StringToWidechar(Str,Buf,400);
  StrHex:='';
  for i:=0 to k-1 do
    StrHex:=StrHex+IntToHex(PWord(@Buf[i])^,4);
  Result:=Trim(StrHex);
end;

//分析发送的消息//
function AnalyzeSendMsg(CommandID:LongWord;Msg:PChar;var BackBuf:PChar):string;stdcall;
var
 tmp:string;
 MessageLength:Integer;
 xHead:THead;
 xBind:TBind;
 tmpChar:array[0..255] of Char;
begin
  FillChar(tmpChar,SizeOf(tmpChar),' ');
  FillChar(xHead,SizeOf(xHead),' ');
  tmp:='';
  //短信序列号
   if Sequence_No = 2147483647 then
     Sequence_No := 0;
    Inc(Sequence_No);
   //消息体命令ID
   tmp:=FmtChar(CommandID,SizeOf(CommandID)*2);
   StrPCopy(tmpChar,tmp);
   Move(tmpChar,xHead.CommandID,SizeOf(xHead.CommandID));
   //消息体序列号
   tmp:=FmtChar(Sequence_No,SizeOf(Sequence_No)*2);
   StrPCopy(tmpChar,tmp);
   Move(tmpChar,xHead.Sequence_No,SizeOf(xHead.Sequence_No));
 case CommandID of
  SGIP_BIND:
   begin
    //消息的总长度
    MessageLength:= Head_Len+Bind_Len;
    tmp:=FmtChar(MessageLength,SizeOf(MessageLength)*2);
    StrPCopy(tmpChar,tmp);
    Move(tmpChar,xHead.MessageLength,SizeOf(xHead.MessageLength));


   end;
  SGIP_UNBIND:
   begin
   end;
  SGIP_SUBMIT:
   begin
   end;
  end;
end;

//分析收到的消息//
function HandleRecvMsg(Buffer:PChar;var BackStr:string;CommandID:Integer):Integer;stdcall;
begin
 case CommandID of
  SGIP_BIND_RESP:
   begin
     BackStr := '对象绑定成功!';
   end;
  SGIP_UNBIND_RESP:
  begin
    BackStr := '解除绑定成功!';
  end;
  SGIP_SUBMIT_RESP:
   begin
     BackStr := '提交短信成功!';
   end;
  SGIP_DELIVER_RESP:
   begin
   end;
  SGIP_REPORT_RESP:
   begin
   end;  
  end;
end;

//获取本地主机IP地址//
function GetLocalIP(var pIPAddress:string):Boolean;stdcall;
type
  TaPInAddr = array [0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe  : PHostEnt;
  pptr : PaPInAddr;
  Buffer : array [0..63] of char;
  I    : Integer;
  GInitData : TWSADATA;
  sIP:string;
begin
  Result:=False;
  WSAStartup($101, GInitData);
  GetHostName(Buffer, SizeOf(Buffer));
  phe :=GetHostByName(buffer);
  if phe = nil then Exit;
  pptr := PaPInAddr(Phe^.h_addr_list);
  I := 0;
  while pptr^[I] <> nil do begin
    sIP:=StrPas(inet_ntoa(pptr^[I]^));
    Inc(I);
  end;
  pIPAddress:=sIP;
 // if (sIP='211.91.136.75')or(sIP='61.242.166.254') then
   Result:=True;
  WSACleanup;
end;

procedure LibExit;
begin
 BufferLine.Free;
 CommandLine.Free;
 ExitProc := SaveExit;
end;

exports
 GetLocalIP,
 HandleRecvMsg,
 AnalyzeSendMsg,
 UnicodeToStr,
 StrToUnicode,
 BinToInt,
 HexToBin;

begin
  { 读取系统参数 }
  Reg:=TRegistry.Create;
  try
    Reg.RootKey:=HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\Software\SGIPServerPar', False)
      then begin
        IPAddr:=Reg.ReadString('RemoteIPAddr');
        Port:=Reg.ReadInteger('RemoteHostPort');
        UserName:=Reg.ReadString('UserName');
        Password:=Reg.ReadString('PassWord');
      end
      else begin
        { 启动设置参数对话框 }
        if Reg.OpenKey('\Software\SGIPServerPar', True)
          then begin
            IPAddr:='127.0.0.0';
            Reg.WriteString('RemoteIPAddr',IPAddr);
            Port:=0;
            Reg.WriteInteger('RemoteHostPort',Port);
            UserName:='Default';
            Reg.WriteString('UserName',UserName);
            Password:='Default';
            Reg.WriteString('PassWord',Password);
          end
          else begin
            MessageBox(0,PChar('无法读取和设置系统参数!'),
                       PChar('错误'),MB_ICONSTOP);
            Halt;
          end;
      end;
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
 {初始化变量}
 BufferLine := TStringList.Create;
 CommandLine:= TStringList.Create;
 SaveExit   := ExitProc;
 ExitProc   := @LibExit;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -