📄 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 <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 + -