spcomm和mscomm的问题(50分)

  • 主题发起人 主题发起人 appleyao
  • 开始时间 开始时间
A

appleyao

Unregistered / Unconfirmed
GUEST, unregistred user!
(1)spcomm的代码如下,用作请求仪器发送
数据:
procedure TForm1.Button4Click(Sender: TObject);
var s:array[1..1] of byte;
begin
s[1]:=byte($02);
comm1.writecommdata(@s[1],1) ;
end;没问题,可以收到数据
代现在我想用mscomm做
procedure TForm1.Button1Click(Sender: TObject);
var s:variant;
y:array[1..1] of byte;
begin
y[1]:=2;
s:=y[1];
mscomm1.output:=s;
end;
出错,应该怎么发?谢了。

(2)
还有一个问题就是:
为什么在delphi环境中编译可以通过,且能读出数据
在切换到资源管理器中执行exe文件,却不能执行?
是什么原因
 
我用此函数,实现了mscomm的数据发送
function sendstr(str_to_send:string):boolean;
var
i:word;
lpbuffer:array [0..1024] of char;
lpnumberofbyteswritten:dword;
begin
for i:= 0 to length(str_to_send)-1 do
lpbuffer:=str_to_send[i+1];
lpbuffer[length(str_to_send)]:=chr($0);
sendstr:=writefile(form1.MSComm1.commid,lpbuffer,length(str_to_send),lpnumberofbyteswritten,nil);
end;
以供参考
 
什么叫出错了,(发送错,还是程序根本就停了?)在哪步错知道后,你就可以根据
错误类型来判断啊,我觉得饿你现在可能指类型转换出错吧,那跟用什么控件有什么
关系啊?
至于第二个问题,我想也得分 开看,你是所有DELPHI编译的EXEX文件都没办法执行,
还是仅此而已啊,我想处理的方法也会不同吧
 
你的问题说的太不清楚了 至少应该把错误代码贴出来 别人才好判断
我用MSComm做过只读 以我的经验 如果是只读或只写的话就应该用MSComm
先贴一点东西 看看你的设置有没有问题
MSComm控件的主要属性及事件:
CommPort:设置或返回串行端口号,缺省值1。
Setting:设置或返回串口通信参数,格式为“波特率,奇偶校验位,数据位,停止位”。例如:MSComm1.Setting:=′9600,n,8,1′
PortOpen:打开或关闭串行端口,格式为:MSComm1.PortOpen:=True|False
CommEvent属性及值的含义:ComEvSend:值为1,发送缓冲区的内容少于SThreshold指定的值
InputMode(输入方式),可以设置为comInputModeText或comInputModeBinary
OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。
OutBufferCount:返回发送缓冲区内等待发送的字节数,可通过设置该属性为0来清空缓冲区。
OutPut:向发送缓冲区传送一串字符
如果在通信过程中发生错误或事件,就会触发OnComm事件,并由CommEvent属性代码
反映错误类型,在通信程序的设计中可根据该属性值来执行不同的操作。
SThreshold:该属性为一阀值,它确定当发送缓冲区内的字节个数少于该值后
就产生代码为ComEvSend的OnComm事件。
所以你的onclick并不一定能触发你的oncomm事件 关键在于某些属性设置的对不对 比如SThreshold
还有你的检测方法......
2。
程序不能正常执行 有没有什么错误信号什么的 安装MSComm时如果你的机器里同时装有VB的话一般MSComm是没有
问题的 否则可能需要手动注册OCX

 
(2)已搞定了,(1)也用不着了。
问题是一个dll的函数有些缺陷。其一个
参数不能设的太长。
 
后退
顶部