请问我在dll中使用了spcomm控件,现在是如何在dll中spcomm的WriteCommData方法里写代码,以及如何在onReceiveData事件中写代

  • 主题发起人 主题发起人 doby_li
  • 开始时间 开始时间
D

doby_li

Unregistered / Unconfirmed
GUEST, unregistred user!
请问我在dll中使用了spcomm控件,现在是如何在dll中spcomm的WriteCommData方法里写代码,以及如何在onReceiveData事件中写代码? ( 积分: 100 )<br />关于发送指令,我现在在dll中是这样写的:
function sendcommdata(scomm:pchar):LongBool;stdcall;
var
sinit6:string;
begin
try
comm1.CommName:=scomm;
sinit6:=HexToStr('6899999999999968050161CD16');
Comm1.WriteCommData(Pchar(sinit6),Length(sinit6));
Result:=true;
except
Result:=false;
end;
end;

在调用程序的按扭上是这样写的:
procedure TFCOMM.btnrestoreClick(Sender: TObject);
begin
if sendcommdata(slt_com.Text) then
//showmessage('复位卡的初始化指令发送成功);
else
messagedlg('复位卡的初始化指令发送失败!',mterror,[mbyes],0);
end;
现在的问题是:
1.上述的发送指令的方法和思路是否正确,各位是如何将发送指令的代码放在dll中的?
2.发送指令后,如何在dll中写代码来触发onReceiveData事件?
我之前在窗体上放个spcomm控件,然后再在onReceiveData事件知道如何写代码,但现在不知道在dll中如何写触发onReceiveData事件的代码。

请各位高手指点,非常感谢。
 
我是想将数据的发送,以及接收返回数据的处理等都放在dll中,调用程序仅传递几个必要的参数给dll进行处理。

我的dll文件大致是这样的:
library Project1;
uses
SysUtils,
Classes,
dialogs,
spcomm;
var
comm1:TComm;
{$R *.res}


function opencomm(scomm:pchar):LongBool;stdcall;
begin
comm1:=TComm.Create(nil);
try
try
comm1.CommName:=scomm;
Comm1.StartComm;
Result:=true;
except
Result:=false;
end;
finally
//comm1.Free;
end;

end;

function closecomm(scomm:pchar):LongBool;stdcall;
begin
try
comm1.CommName:=scomm;
Comm1.stopComm;
Result:=true;
except
Result:=false;
end;
end;

procedure myComm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin
showmessage('测试看能不能执行到这里。');
end;

function sendcommdata(scomm:pchar):LongBool;stdcall;
var
sinit6:string;
begin
try
comm1.CommName:=scomm;
sinit6:=HexToStr('6899999999999968050161CD16');
Comm1.WriteCommData(Pchar(sinit6),Length(sinit6));
Result:=true;
except
Result:=false;
end;

comm1.OnReceiveData:=myComm1ReceiveData;
//此行编译时通不过,提示:[Error] Project1.dpr(202): Incompatible types: 'method pointer and regular procedure' 我现在不知道如何调用这个过程,给这个过程传参。
end;

exports
opencomm,closecomm,sendcommdata;
begin
end.

请各位指点,非常感谢。
 
顶,各位老大帮看一下呀。
谢。
 
这里有串口相关控件和源码
http://www.anylib.com
 
Lucker,没有spcomm控件的相关用法的示例呀,特别是dll中使用spcomm的示例。
 
comm1.OnReceiveData:=myComm1ReceiveData;
这个肯定有问题,comm1.OnReceiveData隐含了一个self参数,当然不兼容了。
建议在DLL里建个类,继承自spcomm,包含方法myComm1ReceiveData,这样就兼容了
 
是的,我现在不知道如何写这类,能不能帮我在dll中写这个类呀,
或者给个类的代码示例,非常感谢。
 
接受答案了.
 
后退
顶部