📄 sgip_api.dpr
字号:
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 + -