开放亿美短信平台

unit Unit1;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ADODB, DB;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Btn_Recv_SMS: TButton;
    Grp_EntReg: TGroupBox;
    Edt_EntName: TEdit;
    Label7: TLabel;
    Label8: TLabel;
    Edt_LinkName: TEdit;
    Edt_LinkPhone: TEdit;
    Label9: TLabel;
    Edt_LinkMobile: TEdit;
    Label10: TLabel;
    Label11: TLabel;
    Edt_Email: TEdit;
    Label12: TLabel;
    Edt_LinkFax: TEdit;
    Label13: TLabel;
    Edt_Address: TEdit;
    Label14: TLabel;
    Edt_PostCode: TEdit;
    Btn_Reg: TButton;
    Grp_ChargeUp: TGroupBox;
    Btn_ChargeUp: TButton;
    Edt_CardNum: TEdit;
    Label3: TLabel;
    Edt_CardPwd: TEdit;
    Label4: TLabel;
    Panel_SN: TPanel;
    Edt_SN: TEdit;
    Label2: TLabel;
    Grp_SendSms: TGroupBox;
    Btn_Send_Sms: TButton;
    Edt_Sms_Cont: TEdit;
    Label6: TLabel;
    Btn_SendSche_Sms: TButton;
    Grp_Trans: TGroupBox;
    Label5: TLabel;
    Edt_Trans_Phone: TEdit;
    Btn_Trans_Reg: TButton;
    Btn_Trans_UnReg: TButton;
    Label15: TLabel;
    Edt_Sms_Phone: TEdit;
    Edt_Sms_SendTime: TEdit;
    Label16: TLabel;
    Edt_Sms_Addi: TEdit;
    Label17: TLabel;
    Grp_Proxy: TGroupBox;
    Btn_Set_Proxy: TButton;
    Edt_Proxy_IP: TLabeledEdit;
    Edt_Proxy_Port: TLabeledEdit;
    Edt_Proxy_User: TLabeledEdit;
    Edt_Proxy_Pwd: TLabeledEdit;
    Edt_SN_PWD: TEdit;
    Label18: TLabel;
    Btn_Send_Sms_Addi: TButton;
    Btn_SendSche_Sms_Addi: TButton;
    Btn_Recv_Sms_Addi: TButton;
    ListBox_Recv_Sms_Cont: TListBox;
    Label21: TLabel;
    ListBox_SendSms_Msg: TListBox;
    Label20: TLabel;
    Edt_Sms_Pri: TEdit;
    Btn_UnReg: TButton;
    Grp_Version: TGroupBox;
    Btn_SetKey: TButton;
    Edt_Key: TEdit;
    Btn_Balance: TButton;
    Btn_Price: TButton;
    Label22: TLabel;
    Btn_Version: TButton;
    Grp_Change_Pwd: TGroupBox;
    Label23: TLabel;
    Edt_SN_Old_PWD: TEdit;
    Label19: TLabel;
    Edt_SN_NEW_PWD: TEdit;
    Btn_ChangePwd: TButton;
    procedure Btn_RegClick(Sender: TObject);
    procedure Btn_BalanceClick(Sender: TObject);
    procedure Btn_ChargeUpClick(Sender: TObject);
    procedure Btn_PriceClick(Sender: TObject);
    procedure Btn_Send_SmsClick(Sender: TObject);
    procedure Btn_SendSche_SmsClick(Sender: TObject);
    procedure Btn_Recv_SMSClick(Sender: TObject);
    procedure Btn_UnRegClick(Sender: TObject);
    procedure Btn_Trans_RegClick(Sender: TObject);
    procedure Btn_Trans_UnRegClick(Sender: TObject);
    procedure Btn_Set_ProxyClick(Sender: TObject);
    procedure Btn_ChangePwdClick(Sender: TObject);
    procedure Btn_Send_Sms_AddiClick(Sender: TObject);
    procedure Btn_SendSche_Sms_AddiClick(Sender: TObject);
    procedure Btn_Recv_Sms_AddiClick(Sender: TObject);
    procedure Btn_SetKeyClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure Btn_VersionClick(Sender: TObject);
  private
    { Private declarations }
    isclose: boolean;
  public                                                                   
    { Public declarations }
  end;
TMTNRecvContent = procedure(mobile, senderaddi, recvaddi, ct,sd:PChar; flag:Pointer);stdcall;
var
  Form1: TForm1;
        //导入的动态库中的函数
        Function GetPrice(sn: Pchar;m:PChar): integer; stdcall;external 'EUCPComm.dll' name 'GetPrice'; //价格
        Function GetBalance(m:PChar;balance:PChar): integer; stdcall;external 'EUCPComm.dll' name 'GetBalance';//查询余额
        Function GetSDKVersion(ver:PChar): integer; stdcall;external 'EUCPComm.dll' name 'GetSDKVersion';//查询版本号
        Function SendScheSMS(sn:PChar;mn:PChar;ct:PChar;ti:PChar): integer; stdcall;external 'EUCPComm.dll' name 'SendScheSMS';//定时发送
        Function _Register(sn:PChar; pwd:PChar; EntName: PChar; LinkMan: PChar; Phone: PChar; Mobile: PChar; Email: PChar; Fax: PChar; sAddress: PChar; Postcode: PChar):integer; stdcall;external 'EUCPComm.dll' name 'Register';//注册
        Function ChargeUp(sn:PChar;acco:PChar;pass:PChar):integer; stdcall;external 'EUCPComm.dll' name 'ChargeUp';//存值
        function ReceiveSMS(sn: PChar; func: Pointer): integer;stdcall;   external 'EUCPComm.dll' name 'ReceiveSMS';//存值
function ReceiveSMSEx(sn: PChar; func: Pointer): integer;stdcall; external 'EUCPComm.dll' name 'ReceiveSMSEx';//存值
        Function CancelTransfer(sn:PChar):integer; stdcall;external 'EUCPComm.dll' name 'CancelTransfer';//申请转接服务
        Function RegistryTransfer(sn:PChar;mn:PChar):integer; stdcall;external 'EUCPComm.dll' name 'RegistryTransfer';//注销转接服务
        function SendSMS(sn,mn,ct,priority:pchar):integer; stdcall;external 'EUCPComm.dll' name 'SendSMS';
        Function SendSMSEx(sn:PChar;mn:PChar;ct:PChar;addiSerial:PChar): integer; stdcall;external 'EUCPComm.dll' name 'SendSMSEx';//即时发送
        Function SendScheSMSEx(sn:PChar;mn:PChar;ct:PChar;ti:PChar;addiSerial:PChar): integer; stdcall;external 'EUCPComm.dll' name 'SendScheSMSEx';//定时发送
        Function SetProxy(proxyAddr:PChar;proxyPort:PChar;proxyUser:PChar;proxyPassword:PChar): integer; stdcall;external 'EUCPComm.dll' name 'SetProxy';//定时发送
        function RegistryPwdUpd( sn, oldpwd,newpwd:pchar):integer;stdcall;external 'EUCPComm.dll' name 'RegistryPwdUpd';
        function UnRegister(sn:pchar):integer;stdcall;external 'EUCPComm.dll' name 'UnRegister' ;
        Function SetKey(key:PChar):integer; stdcall;external 'EUCPComm.dll' name 'SetKey';//注销转接服务

implementation

{$R *.dfm}

procedure ParseMsg(result:integer);
begin
if (result = 1) then
ShowMessage('成功 Return=1')
else if (result = 0)   then
ShowMessage('失败 Return=0')
else if (result = 2)   then
ShowMessage('服务器返回:重复登录,如在同一TCP/IP连接中连续两次以上请求登录')
else if (result = 3)   then
ShowMessage('服务器返回:连接过多,指单个节点要求同时建立的连接数过多')
else if (result = 4)   then
ShowMessage('服务器返回:参数格式错,指命令中参数值与参数类型不符或与协议规定的范围不符')
else if (result = 7)  then
ShowMessage('服务器返回:消息ID错')
else if (result =    then
ShowMessage('服务器返回:信息长度错')
else if (result = 9)   then
ShowMessage('服务器返回:指令操作失败')
else if (result = 10)   then
ShowMessage('服务器返回:客户端注册失败')
else if (result = 11)   then
ShowMessage('服务器返回:企业信息注册失败')
else if (result = 12)    then
ShowMessage('服务器返回:查询余额失败')
else if (result = 13)    then
ShowMessage('服务器返回:充值失败')
else if (result = 14)   then
ShowMessage('服务器返回:手机转移失败')
else if (result = 15)   then
ShowMessage('服务器返回:手机扩展转移失败')
else if (result = 16)   then
ShowMessage('服务器返回:取消转移失败')
else if (result = 17)   then
ShowMessage('服务器返回:发送信息失败')
else if (result = 18)   then
ShowMessage('服务器返回:发送定时信息失败 序列号非法或者余额不足')
else if (result = 19)   then
ShowMessage('服务器返回:接收短信失败')
else if (result = 20)   then
ShowMessage('服务器返回:审核失败')
else if (result = 21)   then
ShowMessage('服务器返回:审核失败')
else if (result = 22)   then
ShowMessage('服务器返回:注销失败')
else if (result = 23)   then
ShowMessage('服务器返回:注册号码不存在')
else if (result = 24)   then
ShowMessage('服务器返回:注册号码未注册')
else if (result = 25)    then
ShowMessage('服务器返回:注册号码密码修改失败')
else if (result = 26)   then
ShowMessage('服务器返回:获取代理信息错误')
else if (result = 27)   then
ShowMessage('服务器返回:查询单条短信费用错误码')
else if (result = 100)  then
ShowMessage('序列号码为空或无效')
else if (result = 101)    then
ShowMessage('网络故障')
else if (result = 102)    then
ShowMessage('其它故障')
else if (result = 103)    then
ShowMessage('注册企业基本信息失败,当软件注册号码注册成功,但整体还是失败,要重新注册')
else if (result = 104)    then
ShowMessage('注册信息填写不完整')
else if (result = 105)    then
ShowMessage('参数指针为空')
else if (result = 106)    then
ShowMessage('卡号或密码为空或无效')
else if (result = 107)    then
ShowMessage('手机号码为空或分割无效')
else if (result = 108)     then
ShowMessage('手机号码分割符号不正确')
else if (result = 109)     then
ShowMessage('部分手机号码不正确,已删除,其余手机号码被发送')
else if (result = 110)    then
ShowMessage('短信内容为空或超长(70个汉字)')
else if (result = 111)    then
ShowMessage('附加号码过长(8位)')
else if (result = 112)    then
ShowMessage('定时时间为空或格式不正确')
else if (result = 113)     then
ShowMessage('定时时间为空或格式不正确')
else if (result = 114)    then
ShowMessage('得到标识错误')
else if (result = 122)    then
ShowMessage('接口调用异常')
else if (result = 125)    then
ShowMessage('初始化通讯SOCKET失败')
else if (result = 126)    then
ShowMessage('获取响应值失败')
else if (result = 999)     then
ShowMessage('函数调用频率过快')
else if (result = 201)   then
ShowMessage('计费失败,请充值')
else if (result = -1)    then
ShowMessage('加载 EUCPComm.DLL 动态库失败')
else
  ShowMessage('其它错误值: ' + IntToStr(result) )
end;


//
// 序列号注册
// 在计算机上发短信必须先注册该软件序列号
// 注意:此函数只需执行一次即可,直到将该序列号换到别的计算机上时才需要重新注册。
// Register(序列号,密码,企业名称,联系人姓名,联系电话,联系手机,电子邮件, 联系传真,公司地址, 邮政编码)
// 参数中:
//【序列号】  通过亿美销售人员获取
//【密码】    通过亿美销售人员获取,长度为6个字节
//【企业名称】最多60字节,必须输入
//【联系人姓名】(最多20字节),必须输入
//【联系电话】(最多20字节),必须输入
//【联系手机】(最多15字节),必须输入
//【电子邮件】(最多60字节),必须输入
//【联系传真】(最多20字节),必须输入
//【公司地址】(最多60字节),必须输入
//【邮政编码】(最多6字节),必须输入
procedure TForm1.Btn_RegClick(Sender: TObject);
var
   result:integer;
begin                      //软件序列号         密码                    企业名称                联系人姓名               联系电话                    联系手机                    电子邮件            联系传真                  公司地址            邮政编码
    result:= _Register(PChar(Edt_SN.Text),PChar(Edt_SN_PWD.Text),PChar(Edt_EntName.Text),PChar(Edt_LinkName.Text),PChar(Edt_LinkPhone.Text),PChar(Edt_LinkMobile.Text),PChar(Edt_Email.Text),PChar(Edt_LinkFax.Text),PChar(Edt_Address.Text),PChar(Edt_PostCode.Text));
    ParseMsg(result);
end;

//
// 查询余额
// 余额不足,发送短信会失败
// GetBalance(软件序列号,余额);
// 【余额字符串】最少10个字节
//
procedure TForm1.Btn_BalanceClick(Sender: TObject);
var
   result:integer;
   balance : array[0..9] of char;
begin
    FillChar(balance,sizeof(balance),0);
    result:=GetBalance(PChar(Edt_SN.Text),balance);
    if(result =1) then
      ShowMessage(balance + ' 元')
    else
      ParseMsg(result);

end;

//
// 充值
// chargeUp(软件序列号,充值卡卡号, 密码)
// 请通过亿美销售人员获取充值卡卡号和密码
// [充值卡卡号]长度为20内
// [密码]长度为6个字节
// 如果余额不足,发送短信会失败
//
procedure TForm1.Btn_ChargeUpClick(Sender: TObject);
var
   result:integer;
begin
    //充值                  软件序列号              卡号             密码
    result:=ChargeUp(PChar(Edt_SN.Text),PChar(Edt_CardNum.Text),PChar(Edt_CardPwd.Text));
    //ShowMessage(IntToStr(result));
    ParseMsg(result);
end;

//
// 查询短信单条费用
// GetPrice(软件序列号,价格);
// 【价格字符串】至少20个字节
procedure TForm1.Btn_PriceClick(Sender: TObject);
var
   result:integer;
   price: array [0..20] of char;
begin
    FillChar(price,sizeof(price),0);
    result:=GetPrice(PChar(Edt_SN.Text),@price);
    if(result = 1) then
      ShowMessage(price + ' 元')
    else
      ParseMsg(result);
end;

//
// 发送即时短信
// sendSMS(软件序列号, 手机号码,短信内容,优先级)
// [手机号码]为手机号码字符串,以半角逗号分隔,最大小于200个手机号码
// [短信内容]为短信内容,最大长度为500字
// (不区分汉字与英文),亿美短信平台会根据实际通道自动拆分,计费以实际拆分条数为准.亿美推荐短信长度70字以内
// [优先级]代表优先级,范围1~5,数值越高优先级越高
procedure TForm1.Btn_Send_SmsClick(Sender: TObject);
var
   result:integer;
   circlenum :integer;
   i: Integer;
begin
    //即时发送
    result := 1;
    circlenum := 0;
    try
          //                 这里是 软件序列号          手机号                     短信内容                优先级
          result := SendSMS(PChar(Edt_SN.Text),PChar(Edt_Sms_Phone.Text),PChar(Edt_Sms_Cont.Text),PChar(Edt_Sms_Pri.Text));
          application.ProcessMessages;
          if(result = 1) then
             Form1.ListBox_SendSms_Msg.Items.Add(Edt_Sms_Phone.Text  + ' :  ' + formatdatetime('hh:nn:ss',now()))
          else
            Form1.ListBox_SendSms_Msg.Items.Add('发送失败'  + ' :  ' + formatdatetime('hh:nn:ss',now()));


    except
      on e:exception do begin
          ShowMessage('异常信息:'+e.Message);
       end;
    end;
    //ShowMessage(IntToStr(result));
    ParseMsg(result);

end;


// 发送定时短信
//  SendScheSMS(软件序列号, 手机号码,短信内容, 定时时间,优先级)
// [定时时间]格式为:年年年年月月日日时时分分秒秒,例如:20090504111010 代表2009年5月4日 11时10分10秒,时间大于当前时间,小于一年以内
// [手机号码]为手机号码字符串,以半角逗号分隔,最大小于200个手机号码
// [短信内容]为短信内容,最大长度为500字(不区分汉字与英文),亿美短信平台会根据实际通道自动拆分
// ,计费以实际拆分条数为准.亿美推荐短信长度70字以内
// [优先级]代表优先级,范围1~5,数值越高优先级越高
procedure TForm1.Btn_SendSche_SmsClick(Sender: TObject);
var
   result:integer;
begin
      //定时发送
    try                         //软件序列号           手机号                 短信内容                   发送时间
      result:=SendScheSMS(PChar(Edt_SN.Text),PChar(Edt_Sms_Phone.Text),PChar(Edt_Sms_Cont.Text),PChar(Edt_Sms_SendTime.Text));
    except
      on exception do begin end;
    end;
    ParseMsg(result);
end;


//接收短信需要的用户自定义的回调函数
// 示例代码为直接输出到 ListBox 内
// mobile:手机号
// senderaddi:发送者附加号
// recvaddi:接收者附加号
// ct:短信内容
// sd:日期
// flag : 标志,为 1 表示有短信
// 上行短信务如果要保存,需要加入业务逻辑代码,如:保存数据库,写文件等等

                               //手机号,发送者附加号,接收者附加号,短信内容, 日期,标识
procedure Recv_Sms_CallBack_Func(mobile, senderaddi, recvaddi,ct,sd:PChar; flag:Pointer);stdcall;
var
  f: integer;
        smscontentstr: AnsiString;
begin
     f := integer(Pointer(flag)^);
     //ShowMessage(inttostr(f));
     if(f = 1) then begin
       smscontentstr := string(mobile) + ';' + string(senderaddi) + ';' + string(recvaddi)+';' + string(ct) + ';' + StrPas(sd);
       Form1.ListBox_Recv_Sms_Cont.Items.Add(smscontentstr);
       //ShowMessage(smscontentstr);
     end;
end;

//
// 得到上行短信
// ReceiveSMS(软件序列号,自定义的接收回调函数)
// 【自定义的接收回调函数】:接收到的短信,会通过回调函数的参数传入,在函数内部可以进行处理,例如存入数据库,写文件等。
//
procedure TForm1.Btn_Recv_SMSClick(Sender: TObject);
var
   result:integer;
   recvContent:PChar;

begin                 //软件序列号        传入回调方法地址
  result := ReceiveSMS(PChar(Edt_SN.Text),@Recv_Sms_CallBack_Func);
  ParseMsg(result);
end;

//
// 注销软件序列号
// UnRegister(软件序列号)
// 当需要在另外一台计算上发短信时,需要先将本机的软件序列号注销,再在别的机器上注册后,才能继续使用
procedure TForm1.Btn_UnRegClick(Sender: TObject);
var
   result:integer;
begin                       //软件序列号      
    result:=UnRegister(PChar(Edt_SN.Text));
    ParseMsg(result);
end;

//
// 注册转接
// 如果需要将上行短信转到该手机上接收,需要调用该函数。
// RegistryTransfer(软件序列号,手机号)
// 【手机号】最多10个,手机号码以半角逗号分隔
procedure TForm1.Btn_Trans_RegClick(Sender: TObject);
var
  result:integer;
begin                       //软件序列号            手机号     
  result:=RegistryTransfer(PChar(Edt_SN.Text),PChar(Edt_Trans_Phone.Text));
  ParseMsg(result);
end;

//
// 取消注册转接
// CancelTransfer(软件序列号)
// 如果需要取消上行短信转发到手机上,需要调用该函数。
procedure TForm1.Btn_Trans_UnRegClick(Sender: TObject);
var
  result:integer;
begin                        //  软件序列号
  result:=CancelTransfer(PChar(Edt_SN.Text));
     ParseMsg(result);
end;

//
// 设置代理服务器
// SetProxy(IP,端口,用户名,密码)
// 如果是通过代理上网,需要向网管取得相关网络信息,然后调用该函数,才能够调用其他函数发短信
procedure TForm1.Btn_Set_ProxyClick(Sender: TObject);
var
   result:integer;
begin
    //                 代理服务器IP      端口                用户名                 密码
    result:=SetProxy(PChar(Edt_Proxy_IP.Text),PChar(Edt_Proxy_Port.Text),PChar(Edt_Proxy_User.Text),PChar(Edt_Proxy_PWD.Text));
    ParseMsg(result);
end;

//
// 修改序列号密码
// RegistryPwdUpd(软件序列号,旧密码, 新密码);
// [密码]长度为6个字节
procedure TForm1.Btn_ChangePwdClick(Sender: TObject);
var
   result:integer;
begin                        //      软件序列号       旧密码                新密码
    result:=RegistryPwdUpd(PChar(Edt_SN.Text),PChar(Edt_SN_Old_PWD.Text),PChar(Edt_SN_NEW_PWD.Text));
    ParseMsg(result);
end;

//
// 发送即时短信(带附加号码,即扩展号)
//  SendSMSEx(软件序列号,手机号码,短信内容, 附加号码,优先级)
// [手机号码]为手机号码字符串,以半角逗号分隔,最大小于200个手机号码
// [短信内容]为短信内容,最大长度为500字
// (不区分汉字与英文),亿美短信平台会根据实际通道自动拆分,计费以实际拆分条数为准.亿美推荐短信长度70字以内
// [附加号码]用户自定义的附加号码,一般小于6个字节
// [优先级]代表优先级,范围1~5,数值越高优先级越高
procedure TForm1.Btn_Send_Sms_AddiClick(Sender: TObject);
var
   result:integer;
begin
    //即时发送
    try          //      这里是   软件序列号          手机号                      短信内容              附加号
         result:=SendSMSEx(PChar(Edt_SN.Text),PChar(Edt_Sms_Phone.Text),PChar(Edt_Sms_Cont.Text),PChar(Edt_Sms_Addi.Text));
    except
        on exception do begin end;
    end;
    ParseMsg(result);

end;

//
// 发送定时短信(带附加号码,即扩展号)
//  SendScheSMSEx(软件序列号, 手机号码,短信内容, 定时时间,附加号码,优先级)
// [定时时间]格式为:年年年年月月日日时时分分秒秒,例如:20090504111010 代表2009年5月4日 11时10分10秒,时间大于当前时间,小于一年以内
// [手机号码]为手机号码字符串,以半角逗号分隔,最大小于200个手机号码
// [短信内容]为短信内容,最大长度为500字(不区分汉字与英文),亿美短信平台会根据实际通道自动拆分
// ,计费以实际拆分条数为准.亿美推荐短信长度70字以内
// [附加号码]用户自定义的附加号码,一般小于6个字节
// [优先级]代表优先级,范围1~5,数值越高优先级越高
procedure TForm1.Btn_SendSche_Sms_AddiClick(Sender: TObject);
var
   result:integer;
begin
      //定时发送
    try                       //软件序列号                  手机号             短信内容                   发送时间                      附加号
       result:=SendScheSMSEx(PChar(Edt_SN.Text),PChar(Edt_Sms_Phone.Text),PChar(Edt_Sms_Cont.Text),PChar(Edt_Sms_SendTime.Text),PChar(Edt_Sms_Addi.Text));
    except
          on exception do begin end;
    end;
ParseMsg(result);
end;


//
// 得到上行短信(带附加号码)
// ReceiveSMSEx(软件序列号,自定义的接收回调函数)
// 【自定义的接收回调函数】:接收到的短信和附加号码,会通过回调函数的参数传入,在函数内部可以进行处理,例如存入数据库,写文件等。
procedure TForm1.Btn_Recv_Sms_AddiClick(Sender: TObject);
var
   result:integer;
begin
   try                       //软件序列号         传入回调方法地址
     result := ReceiveSMSEx(PChar(Edt_SN.Text),@Recv_Sms_CallBack_Func);
   except
      on exception do begin        
      end;
   end;
   ParseMsg(result);
end;

//
// 设置Key
// SetKey(自定义的字符串)
// 如果软件序列号需要在多台机器上使用,需要先调用该函数一次,再发送短信
procedure TForm1.Btn_SetKeyClick(Sender: TObject);
var
   result:integer;
begin
   //设置Key(用于多台机器共用同一个序列号)  这里添加 统一自定义的字符串
   result := SetKey(PChar(trim(Edt_Key.Text)));
    ParseMsg(result);
end;

procedure savelogfile(a_file, a_log: string);
var logfile:textfile;
begin
  assignfile(logfile,a_file);
  try
    if fileexists(a_file) then append(logfile) else rewrite(logfile);
    writeln(logfile,'工作时间'+formatdatetime('yyyy-mm-dd hh:mm:ss',now()));
    writeln(logfile,a_log);
  finally
    closefile(logfile);
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  isclose := true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

//序列号,请通过亿美销售人员获取
  Edt_SN.Text := '0SDK-EMY-0130-ABCDE';
  //密码,请通过亿美销售人员获取
  Edt_SN_PWD.Text := '123456';
  Edt_Trans_Phone.Text := '13701381234';
end;

//
// 查询软件版本号
// GetSDKVersion(软件版本号)
// 【软件版本号字符串】:最少20个字节
procedure TForm1.Btn_VersionClick(Sender: TObject);

var
   result:integer;
   version : array[0..20] of char;
begin
    //                    软件序列号
    FillChar(version,sizeof(version),0);
    result:=GetSDKVersion(version);
    ShowMessage(version);
end;
end.

你可能感兴趣的:(windows,windows,socket,网络协议,mobile,mobile,phone)