这是一个COM通讯的程序
我先得到传来的信息
procedure TdtmCom.FComReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
sStr : Array [0..512] of Char;
i : Integer;
sReadStr : String;
begin
for i:= 0 to 512 do sStr[i] := #0;
Move(buffer^,sStr, BufferLength);
sReadStr := sStr;
TInstrument.ppSendInfo(sReadStr);
end;然后再要吧这个sStr传送出去,这是写在另一段函数里的
procedure TInstrument.ppSendInfo(AInfo: Srting);
var
sStr : Array[0..512] of char;
i, iCount, iLen :Integer;
begin
if pbIsListen then begin
iCount := 1;
iLen := Length(AInfo);
for i := 1 to iLen do begin
sStr[i - 1] := AInfo[i]; Inc(iCount);
end;
sStr[iCount-1] := #0;
dtmCom.FCom.WriteCommData(sStr,iCount);
end
end;现在我不能再用字符串传送了,必须直接使用Char。我的程序应该怎样改?
ppSendInfo(AInfo:)里的应该怎样定义AInfo的类型,是否需要使用指针?应该怎样使用?
我先得到传来的信息
procedure TdtmCom.FComReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
sStr : Array [0..512] of Char;
i : Integer;
sReadStr : String;
begin
for i:= 0 to 512 do sStr[i] := #0;
Move(buffer^,sStr, BufferLength);
sReadStr := sStr;
TInstrument.ppSendInfo(sReadStr);
end;然后再要吧这个sStr传送出去,这是写在另一段函数里的
procedure TInstrument.ppSendInfo(AInfo: Srting);
var
sStr : Array[0..512] of char;
i, iCount, iLen :Integer;
begin
if pbIsListen then begin
iCount := 1;
iLen := Length(AInfo);
for i := 1 to iLen do begin
sStr[i - 1] := AInfo[i]; Inc(iCount);
end;
sStr[iCount-1] := #0;
dtmCom.FCom.WriteCommData(sStr,iCount);
end
end;现在我不能再用字符串传送了,必须直接使用Char。我的程序应该怎样改?
ppSendInfo(AInfo:)里的应该怎样定义AInfo的类型,是否需要使用指针?应该怎样使用?
解决方案 »
- 请问如何对TClientDataSet里的数据进行递归循环?
- 关于一个多条件查询语句写法
- 服务程序调用ShellExecute结果该程序也是SYSTEM权限并且闪一下才到后台运行
- 讨论一个方案!!
- 用WebBrower控件时,无法postData,请教高手
- 如果接到了单,结果完不成,赔钱,到底谁之过?
- 求援:delphi中调试器出错问题------在线等
- 请问如何对adoquery查询的数据集进行数据删除?请高手耐心看我的意思!谢谢!一百分求教!!
- 谁能提供<商场管理系统单机版>所用的的第三方控件啊?
- 编译问题
- 由字符返回一个对应的整数值的那么一个函数是那个?
- 高手请看:用程序备份完SQL Server数据库后还原时遇到的问题!
for i:= 0 to 512 do sStr[i] := #0;
这句话别扭你直接赋sStr[0] #0不就完了
这样修改
procedure TInstrument.ppSendInfo(AInfo:array of Char;arrayLength:integer);
调用的时候这样
procedure TdtmCom.FComReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
sStr : Array [0..512] of Char;
i : Integer;
begin
for i:= 0 to 512 do sStr[i] := #0;//这句可以这样写fillChar(sStr,length(sStr),0);更好些
Move(buffer^,sStr, BufferLength);
sReadStr := sStr;
TInstrument.ppSendInfo(sStr,BufferLength);
end;