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

📄 smsdll.pas

📁 手机的短信程序
💻 PAS
字号:
unit SMSDLL;
{**************************************************************************}
{                                                                          }
{    This C DLL header file first (automatic) conversion generated by:     }
{    HeadConv 4.0 (c) 2000 by Bob Swart (aka Dr.Bob - www.drbob42.com)     }
{      Final Delphi-Jedi (Darth) command-line units edition                }
{                                                                          }
{    Generated Date:   2004-2-1                                            }
{    Generated Time: 19:54:31                                              }
{                                                                          }
{**************************************************************************}

interface
uses
{$IFDEF WIN32}
  Windows;
{$ELSE}
  Wintypes, WinProcs;
{$ENDIF}


{=> d:\vc_exec\dll\smsdll\SMSDLL.H <=}

{$IFNDEF _smsdll_h_}
{$DEFINE _smsdll_h_}

{$INCLUDE <windows.h>}
{/// 用户信息编码方式 }
const
  GSM_7BIT = 0;
const
  GSM_8BIT = 4;
const
  GSM_UCS2 = 8;

{/// 串口设备句柄 }

{/// 短消息参数结构,编码/解码共用 }
{/// 其中,字符串以0结尾 }
type
  SM_PARAM = record
    SCA: Array[0..16-1] of Char;
    TPA: Array[0..16-1] of Char;
    TP_PID: Char;
    TP_DCS: Char;
    TP_SCTS: Array[0..16-1] of Char;
    TP_UD: Array[0..161-1] of Char;
    index: Char;
  end {SM_PARAM};

{/// 正常顺序的字符串转换为两两颠倒的字符串,若长度为奇数,补'F'凑成偶数 }
{/// 如:"8613851872468" --> "683158812764F8" }
{/// pSrc: 源字符串指针 }
{/// pDst: 目标字符串指针 }
{/// nSrcLength: 源字符串长度 }
{/// 返回: 目标字符串长度 }
var
  _declspec: function(const pSrc: PDLLEXPORT) INT _CDECL GSMINVERTNUMBERS( CHAR; 
                      pDst: PChar; 
                      nSrcLength: Integer): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// 两两颠倒的字符串转换为正常顺序的字符串 }
{/// 如:"683158812764F8" --> "8613851872468" }
{/// pSrc: 源字符串指针 }
{/// pDst: 目标字符串指针 }
{/// nSrcLength: 源字符串长度 }
{/// 返回: 目标字符串长度 }
var
  _declspec: function(const pSrc: PDLLEXPORT) INT _CDECL GSMSERIALIZENUMBERS( CHAR; 
                      pDst: PChar; 
                      nSrcLength: Integer): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// PDU编码,用于编制、发送短消息 }
{/// pSrc: 源PDU参数指针 }
{/// pDst: 目标PDU串指针 }
{/// 返回: 目标PDU串长度 }
var
  _declspec: function(const pSrc: PDLLEXPORT) INT _CDECL GSMENCODEPDU( SM_PARAM; 
                      pDst: PChar): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// PDU解码,用于接收、阅读短消息 }
{/// pSrc: 源PDU串指针 }
{/// pDst: 目标PDU参数指针 }
{/// 返回: 用户信息串长度 }
var
  _declspec: function(const pSrc: PDLLEXPORT) INT _CDECL GSMDECODEPDU( CHAR; 
                      var pDst: SM_PARAM): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// 7-bit编码 }
{/// pSrc: 源字符串指针 }
{/// pDst: 目标编码串指针 }
{/// nSrcLength: 源字符串长度 }
{/// 返回: 目标编码串长度 }
var
  _declspec: function(const pSrc: PDLLEXPORT) INT _CDECL GSMENCODE7BIT( CHAR; 
                      var pDst: Byte; 
                      nSrcLength: Integer): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// 7-bit解码 }
{/// pSrc: 源编码串指针 }
{/// pDst: 目标字符串指针 }
{/// nSrcLength: 源编码串长度 }
{/// 返回: 目标字符串长度 }
var
  _declspec: function(const pSrc: PDLLEXPORT) INT _CDECL GSMDECODE7BIT( UNSIGNED CHAR; 
                      pDst: PChar; 
                      nSrcLength: Integer): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// UCS2编码 }
{/// pSrc: 源字符串指针 }
{/// pDst: 目标编码串指针 }
{/// nSrcLength: 源字符串长度 }
{/// 返回: 目标编码串长度 }
var
  _declspec: function(const pSrc: PDLLEXPORT) INT _CDECL GSMENCODEUCS2( CHAR; 
                      var pDst: Byte; 
                      nSrcLength: Integer): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// UCS2解码 }
{/// pSrc: 源编码串指针 }
{/// pDst: 目标字符串指针 }
{/// nSrcLength: 源编码串长度 }
{/// 返回: 目标字符串长度 }
var
  _declspec: function(const pSrc: PDLLEXPORT) INT _CDECL GSMDECODEUCS2( UNSIGNED CHAR; 
                      pDst: PChar; 
                      nSrcLength: Integer): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// 可打印字符串转换为字节数据 }
{/// 如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} }
{/// pSrc: 源字符串指针 }
{/// pDst: 目标数据指针 }
{/// nSrcLength: 源字符串长度 }
{/// 返回: 目标数据长度 }
var
  _declspec: function(const pSrc: PDLLEXPORT) INT _CDECL GSMSTRING2BYTES( CHAR; 
                      var pDst: Byte; 
                      nSrcLength: Integer): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// 字节数据转换为可打印字符串 }
{/// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01" }
{/// pSrc: 源数据指针 }
{/// pDst: 目标字符串指针 }
{/// nSrcLength: 源数据长度 }
{/// 返回: 目标字符串长度 }
var
  _declspec: function(const pSrc: PDLLEXPORT) INT _CDECL GSMBYTES2STRING( UNSIGNED CHAR; 
                      pDst: PChar; 
                      nSrcLength: Integer): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// 发送短消息 }
{/// pSrc: 源PDU参数指针 }
var
  _declspec: function(const pSrc: PDLLEXPORT) BOOL _CDECL GSMSENDMESSAGE( SM_PARAM): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// 读取短消息 }
{/// 用+CMGL代替+CMGR,可一次性读出全部短消息 }
{/// pMsg: 短消息缓冲区,必须足够大 }
{/// 返回: 短消息条数 }
var
  _declspec: function(var pMsg: DLLEXPORT) INT _CDECL GSMREADMESSAGE(SM_PARAM): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// 删除短消息 }
{/// index: 短消息序号,从1开始 }
var
  _declspec: function(const index: DLLEXPORT) BOOL _CDECL GSMDELETEMESSAGE( INT): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// 打开串口 }
{/// pPort: 串口名称或设备路径,可用"COM1"或"\\.\COM1"两种方式,建议用后者 }
{/// nBaudRate: 波特率 }
{/// nParity: 奇偶校验 }
{/// nByteSize: 数据字节宽度 }
{/// nStopBits: 停止位 }
var
  _declspec: function(const pPort: PDLLEXPORT) BOOL _CDECL OPENCOMM( CHAR; 
                      nBaudRate: Integer; 
                      nParity: Integer; 
                      nByteSize: Integer; 
                      nStopBits: Integer): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// 关闭串口 }
var
  _declspec: function(CloseComm(: DLLEXPORT) BOOL _CDECL): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// 写串口 }
{/// pData: 待写的数据缓冲区指针 }
{/// nLength: 待写的数据长度 }
var
  _declspec: function(var pData: DLLEXPORT) VOID _CDECL WRITECOMM(VOID; 
                      nLength: Integer): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 
{/// 读串口 }
{/// pData: 待读的数据缓冲区指针 }
{/// nLength: 待读的最大数据长度 }
{/// 返回: 实际读入的数据长度 }
var
  _declspec: function(var pData: DLLEXPORT) INT _CDECL READCOMM(VOID; 
                      nLength: Integer): "C" cdecl  {$IFDEF WIN32} stdcall {$ENDIF}; 

{$ENDIF}

var
  DLLLoaded: Boolean { is DLL (dynamically) loaded already? }
    {$IFDEF WIN32} = False; {$ENDIF}

implementation

var
  SaveExit: pointer;
  DLLHandle: THandle;
{$IFNDEF MSDOS}
  ErrorMode: Integer;
{$ENDIF}

  procedure NewExit; far;
  begin
    ExitProc := SaveExit;
    FreeLibrary(DLLHandle)
  end {NewExit};

procedure LoadDLL;
begin
  if DLLLoaded then Exit;
{$IFNDEF MSDOS}
  ErrorMode := SetErrorMode($8000{SEM_NoOpenFileErrorBox});
{$ENDIF}
  DLLHandle := LoadLibrary('SMSDLL.DLL');
  if DLLHandle >= 32 then
  begin
    DLLLoaded := True;
    SaveExit := ExitProc;
    ExitProc := @NewExit;
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
    @_declspec := GetProcAddress(DLLHandle,'_declspec');
  {$IFDEF WIN32}
    Assert(@_declspec <> nil);
  {$ENDIF}
  end
  else
  begin
    DLLLoaded := False;
    { Error: SMSDLL.DLL could not be loaded !! }
  end;
{$IFNDEF MSDOS}
  SetErrorMode(ErrorMode)
{$ENDIF}
end {LoadDLL};

begin
  LoadDLL;
end.

⌨️ 快捷键说明

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