捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:kercom串口库,最灵活强大的串口库
tianqi0072600 81955 2014/2/25 16:36:17
没有动态库源码,真心不厚道
supersun 46260 2013/5/16 16:38:15
LoadLibrary
hongss 44154 2013/2/1 21:41:06
好麻烦,比SpComm一类的控件麻烦多了,不好用
lkpc 42948 2012/11/3 23:22:14
下载时弹出的广告图片能否向下一些啊,我的浏览器中老是只能看到下半张图片,上面的看不到。
leexiaodong 42637 2012/8/21 8:43:33
垃圾,无原码...
pholon 42598 2012/7/27 22:55:18
本来还挺心动,不过没源码,还真不敢用于生产环境,万一出个小问题都没法改!
kylixxp 42457 2012/5/14 11:46:37
本来还挺心动,不过没源码,还真不敢用于生产环境,万一出个小问题都没法改!
wangarcon 42441 2012/5/2 10:06:43
谢谢!
louemusic 42432 2012/4/26 15:19:36
串口标识 形如 'COM1:9600,n,8,1'
louemusic 42431 2012/4/26 15:18:33
1.TCommEntry.Open(const Param: PINITPARAM): Boolean;
功能:打开串口. 可以 OPEN 多次. 此时, 将执行 CLEAR / CLOSE / OPEN 操作
返回: TRUE = 成功 / FALSE = 失败
Param:  串口初始化参数.
INITPARAM = record
    lpszSetting: PChar;         // 形如 'COM1,9600,N,8,1'的串口标识
    pCallBack: pfnOnDataNotify; // RX 事件 回调
    nLenForRead: Integer;       // 每次回调事件 所需接收的字符数
    dwUser: DWORD;          // 用户参数
  end;
  PINITPARAM = ^INITPARAM;
  
 pfnOnDataNotify = function(hCom: HCOMM; const lpData: Pointer; ulLen: ULONG; dwUser: DWORD): BOOL; cdecl;
  接收事件函数原型.
  返回值: TRUE / FALSE. TRUE 表示回调结束后此数据从主缓冲中删除. FALSE 表示数据未完全接收, 返回后继续保留在主缓冲区.下次回调将继续提供此数据
  hCom: kercom 初始化句柄.
  lpData: 当前数据缓冲区
  ulLen:  回调触发时的数据长度
  dwUser: 用户参数
  接收事件 中可以 使用 流 函数.
  
2. TCommEntry.Close;
功能:关闭串口
返回: TRUE / FALSE;
将一直返回TRUE.

3.TCommEntry.IsOpen;
功能: 判断是否已打开;
返回: TRUE / FALSE;

4.TCommEntry.Write(const lpData: Pointer; ulLen: ULONG): Boolean;
功能:写入数据到串口.并发送.
lpData^的数据将被拷贝到发送缓冲区.
ulLen为数据长度.
如果发送缓冲区中数据未发送完,又进行了Write操作,则Write将返回失败.
如果 有多个 不合并数据 的Write操作, 此时可以 使用While(!Write(..))来保证数据成功发送.

5.TCommEntry.CommIOFunc(dwFlag: DWORD): Boolean;
功能: 引脚控制
dwFlag为 SETDTR / SETDSR 等引脚控制代码.

6.TCommEntry.SetCallbackParam(dwLen: DWORD; OnCallBack: pfnOnDataNotify; dwUser: DWORD): Boolean;
功能:设置 回调参数.
返回: TRUE / FALSE;
dwLen: 回调数据长度. 如果 dwLen=0, 则不触发接收事件. 此时使用流函数进行读取
pfnOnDataNotify: 事件函数指针
dwUser: 用户数据

流函数:
7.TCommEntry.StreamGetLen: ULONG;
功能: 读取主缓冲中数据长度

8.TCommEntry.StreamRead(const lpData: Pointer; ulLen: ULONG; ro: integer): Cardinal;
功能:读取主缓冲中指定长度数据.
返回: 已读取的长度
lpData: 用户缓冲区. 如果lpData为NULL, 表示从主缓冲中 删除指定长度的数据.
ulLen:  读取长度
ro:    读取模式, 可为RO_PEEK 及RO_READ
RO_PEEK: 检索指定长度数据, 数据仍保留在主缓冲区.
RO_READ: 读取并删除.

9.TCommEntry.StreamClear: Boolean;
功能: 清除所有数据.
返回: TRUE / FALSE;
louemusic 42430 2012/4/26 14:51:38
unit uMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,uKerComDef, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    BtnOpen: TButton;
    BtnClose: TButton;
    mem: TMemo;
    BtnWrite: TButton;
    Button1: TButton;
    EdtConf: TEdit;
    Label1: TLabel;
    EdtLen: TEdit;
    BtnSet: TButton;
    LBRX: TLabel;
    procedure BtnOpenClick(Sender: TObject);
    procedure BtnWriteClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure BtnCloseClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BtnSetClick(Sender: TObject);
  private
    { Private declarations }
    CommEntry:TCommEntry;
  public
    { Public declarations }
  end;


var
      Form1: TForm1;
      FRX:cardinal;

implementation

{$R *.dfm}
function OnLineEvent(hCom: HCOMM; dwEvent, dwState, dwUser: DWORD): BOOL; cdecl;
begin
  with TForm1(dwUser), CommEntry do
    mem.Lines.Add(Format('Event: %d State: %d', [dwEvent, dwState]));
end;

function OnData(hCom:HCOMM;const lpData:Pointer;ulLen:ULONG;dwUser:DWORD):BOOL;cdecl;
var
  s:string;
  n:integer;
begin
  result := true;
  if dwUser=0 then
    exit;

  with TForm1(dwUser), CommEntry do begin
    if ulLen = 0 then
    ulLen := StreamGetLen();
    setlength(s, ulLen);
    StreamRead(@s[1], ulLen, RO_READ);
    mem.Lines.Add(s);
    inc(FRX, ulLen);
    Form1.LBRX.Caption := IntToStr(FRX);
  end;
end;

procedure TForm1.BtnOpenClick(Sender: TObject);
var
  ip: INITPARAM;
begin
  with CommEntry do begin
    ip.pCallBack := @OnData;
    ip.nLenForRead := StrToInt(EdtLen.Text);
    ip.lpszSetting := PChar(EdtConf.Text);
    ip.dwUser := DWORD(Self);
    Open(@ip);
          
    BtnClose.Enabled := IsOpen();
    BtnOpen.Enabled := not IsOpen();
    FRX := 0;
  end;
end;

procedure TForm1.BtnWriteClick(Sender: TObject);
begin
  with CommEntry do
    Write(PChar(mem.Text), Length(mem.Text));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FRX:=0;
  mem.clear
end;

procedure TForm1.BtnCloseClick(Sender: TObject);
var
  bRet: boolean;
begin
  mem.Clear;
  with CommEntry do begin
    bRet := CommEntry.Close();
    BtnOpen.Enabled := not IsOpen();
    BtnClose.Enabled := IsOpen();
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  CommEntry.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  CommEntry := TCommEntry.Create;
  CommEntry.OnLineEvent := OnLineEvent;
end;

procedure TForm1.BtnSetClick(Sender: TObject);
begin
  if not CommEntry.SetCallbackParam(StrToInt(EdtLen.Text), nil, DWORD(Self))then
    Application.MessageBox('Set ERROR', 'Error', MB_OK or MB_ICONERROR);
end;

end.
//////////
///////DFM 
//////DFM
object Form1: TForm1
  Left = 293
  Top = 206
  AutoScroll = False
  Caption = '串口库测试'
  ClientHeight = 610
  ClientWidth = 877
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  DesignSize = (
    877
    610)
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 673
    Top = 16
    Width = 33
    Height = 13
    Anchors = [akTop, akRight]
    Caption = 'Setting'
  end
  object LBRX: TLabel
    Left = 736
    Top = 400
    Width = 6
    Height = 13
    Caption = '0'
  end
  object BtnOpen: TButton
    Left = 737
    Top = 88
    Width = 103
    Height = 36
    Anchors = [akTop, akRight]
    Caption = 'Open'
    TabOrder = 0
    OnClick = BtnOpenClick
  end
  object BtnClose: TButton
    Left = 737
    Top = 144
    Width = 103
    Height = 36
    Anchors = [akTop, akRight]
    Caption = 'Close'
    Enabled = False
    TabOrder = 1
    OnClick = BtnCloseClick
  end
  object mem: TMemo
    Left = 0
    Top = 0
    Width = 619
    Height = 610
    Align = alLeft
    Anchors = [akLeft, akTop, akRight]
    Font.Charset = ANSI_CHARSET
    Font.Color = clWindowText
    Font.Height = -12
    Font.Name = 'Arial'
    Font.Style = []
    ParentFont = False
    ScrollBars = ssVertical
    TabOrder = 2
  end
  object BtnWrite: TButton
    Left = 737
    Top = 208
    Width = 103
    Height = 36
    Anchors = [akTop, akRight]
    Caption = 'Write'
    TabOrder = 3
    OnClick = BtnWriteClick
  end
  object Button1: TButton
    Left = 737
    Top = 280
    Width = 103
    Height = 36
    Anchors = [akTop, akRight]
    Caption = 'Clear'
    TabOrder = 4
    OnClick = Button1Click
  end
  object EdtConf: TEdit
    Left = 713
    Top = 16
    Width = 121
    Height = 21
    Anchors = [akTop, akRight]
    TabOrder = 5
    Text = 'COM1:9600,N,8,1'
  end
  object EdtLen: TEdit
    Left = 745
    Top = 56
    Width = 89
    Height = 21
    Anchors = [akTop, akRight]
    TabOrder = 6
    Text = '0'
  end
  object BtnSet: TButton
    Left = 739
    Top = 344
    Width = 97
    Height = 41
    Anchors = [akTop, akRight]
    Caption = 'Set'
    TabOrder = 7
    OnClick = BtnSetClick
  end
end
wangarcon 42421 2012/4/25 14:49:39
能不能给个示例啊,谢谢!
zwscool 42420 2012/4/25 11:42:01
留个邮箱麻烦发一份给我,谢谢jonsankings@163.com
zwscool 42419 2012/4/25 11:21:47
c源码也麻烦发一份啦
louemusic 42418 2012/4/25 10:52:47
源码为 C , 签于这是DELPHI 论坛 就不发了
liyong0775 42415 2012/4/25 8:47:13
没有源码谁敢用
jxlong 42414 2012/4/24 23:33:29
希望共享库原码!
z_cd 42413 2012/4/24 23:26:32
能不能带上kercom.dll的源码啊,不想带一个DLL发布好麻烦
第一页 上一页 下一页 最后页 有 18 条纪录 共1页 1 - 18
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表