www.pudn.com > smsdll.zip > SMSDLL.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 } 
{/// 用户信息编码方式 } 
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.