首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在delphi dll中使用tcomport时出错

在delphi dll中使用tcomport时出错
EN

Stack Overflow用户
提问于 2013-12-31 19:03:27
回答 1查看 1.4K关注 0票数 0

我在做一个小的动态链接库,我在上面使用了TComport组件。我在这个dll中有一个函数,它接受一些参数并返回一个字符。我在项目中添加了一个数据模块,并在上面添加了TComport和TComDataPacket。一切运行正常,但TComport无法捕获任何事件。例如,我想从TComDataPacket组件的OnPacket evet中获取device中的字符串。任何建议,我为我糟糕的英语道歉。

代码语言:javascript
复制
library VoteService;
uses
  System.SysUtils,
  System.Classes,
  Extra in 'Extra\Extra.pas',
  Un_Dm in 'DataModule\Un_Dm.pas' {DM: TDataModule},
  CPort in 'CPort\CPort.pas';


var ComPort1 : TComPort;
    ComDataPacket1 : TComDataPacket;

{$R *.res}

function getVote(personnelCode:Pchar; docCode: Pchar):Integer; stdcall;
var
  intStatus, intIdentifier: Integer;
  strStatus_message: string;
  Port: TPort;
  StopBits: TStopBits;
  Parity: TParityBits;
  DataBits: TDataBits;
  BaudRate: TBaudRate;
  i, j : Integer;
begin
  Answer := 0;
  SerialPortSetting(Port, StopBits, Parity, DataBits, BaudRate);
  dm := TDM.Create(nil);
  try
  DM.ComPort1.Port := Port;
  DM.ComPort1.StopBits := StopBits;
  DM.ComPort1.Parity.Bits := Parity;
  DM.ComPort1.DataBits := DataBits;
  DM.ComPort1.BaudRate := BaudRate;

  DM.ComPort1.Connected := True;
  DM.ComPort1.WriteStr('*');
  DM.ComPort1.Close;
  DM.ComPort1.Open;
  for i  := 0 to 5 do
  begin
    j := 0;
    while Answer = 0 do
    begin
      //setAnswer;
    end;
    Result := Answer;
  end;
  finally
    dm.Free;
  end;
end;

exports
  getVote;

begin

end.
EN

回答 1

Stack Overflow用户

发布于 2014-01-05 21:35:14

我的问题解决了,实际上问题不是在DataModule上,而是我不能在Dll项目中捕获任何ComPort事件,最后我知道我必须使用循环并连续检查,直到我可以获得我期望的值。我在这里输入了正确的代码,

谢谢你们所有人。

代码语言:javascript
复制
library VoteService;

uses
  System.SysUtils, DateUtils,
  System.Classes,
  Extra in 'Extra\Extra.pas',
  Un_Dm in 'DataModule\Un_Dm.pas' {DM: TDataModule},
  CPort in 'CPort\CPort.pas';

{$R *.res}

function getVote(personnelCode:Pchar; docCode: Pchar; waitSecound : Integer):Integer;   stdcall;
var
  intStatus, intIdentifier: Integer;
  strStatus_message: string;
  Port: TPort;
  StopBits: TStopBits;
  Parity: TParityBits;
  DataBits: TDataBits;
  BaudRate: TBaudRate;
  s : string;
  tmpTime : TTime;
begin
  Answer := 0;
  SerialPortSetting(Port, StopBits, Parity, DataBits, BaudRate);
  dm := TDM.Create(nil);
  try
    DM.ComPort1.Port := Port;
    DM.ComPort1.StopBits := StopBits;
    DM.ComPort1.Parity.Bits := Parity;
    DM.ComPort1.DataBits := DataBits;
    DM.ComPort1.BaudRate := BaudRate;
    DM.ComPort1.Connected := True;
    DM.ComPort1.WriteStr('*');
    DM.ComPort1.Close;
    DM.ComPort1.Open;
    tmpTime := Now;
    s := '';
    repeat DM.ComPort1.ReadStr(s, len);
    until (SecondsBetween(Now, tmpTime) > waitSecound) or (length(s)>0);
    if s = '' then
       Result := 0
    else
       Result := StrToInt(s);
  finally
    dm.Free;
  end;
end;
exports
  getVote;

begin

end.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20856315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档