我的程式代码如下:======================================================================================function SendATCommand(ATCommand : Pchar; Waiting:Integer):Pchar;stdcall;
var
J: Integer;
Temp : string;
Tempstr:Pchar;
begin
//CheckBuffer;
ApdComPort.FlushInBuffer;
ComPortReturnString := '';
ComPortDoneFlag := False;
ComPortReturnErrorFlag := False;
ApdComPort.PutString(ATCommand);
ApdComPort.PutChar(#13);
ApdComPort.PutChar(#10); //waiting for
j := 0;
while ((ComPortDoneFlag = False) and (ComPortReturnErrorFlag = False) and ( j < waiting)) do begin
J := J + 1;
Sleep(100); Application.ProcessMessages();
end; Getmem(Tempstr,255); Temp:=ComPortReturnString;
Temp := StringReplace(Temp,ATCommand,'',[rfReplaceAll]);
Temp := StringReplace(Temp,#13,'',[rfReplaceAll]);
Temp := StringReplace(Temp,#10,'',[rfReplaceAll]);
StrPcopy(Tempstr,Temp);
Result:=Tempstr;
end;====================================================================================运行到Application.ProcessMessages();时,程序开始处理消息事件,消息事件代码如下:
====================================================================================
class procedure TTempProc.ApdComPortTriggerAvailWithReturnOKString(CP: TObject; Count: Word);
var
I : Word;
TempComPortReturnString:array [0..254] of char;
//Temp:Pchar;
begin
GetMem(ComPortReturnString,255);
TempComPortReturnString:='';
//getmem(Temp,255);
for I := 1 to Count do begin
TempComPortReturnString[I-1] := (CP as TApdComPort).GetChar;
ComPortDoneFlag:=Pos('OK',TempComPortReturnString)>0;
ComPortReturnErrorFlag:=Pos('ERROR',TempComPortReturnString)>0;
end;
strpcopy(ComPortReturnString,TempComPortReturnString);end;
=======================================================================================
可是当处理完消息事件要出来的时候却出不来了,提示:"Access violation at address 012212F5 in module 'qtintf.dll'.Read of address 0000001C."要怎么解决呢?
var
J: Integer;
Temp : string;
Tempstr:Pchar;
begin
//CheckBuffer;
ApdComPort.FlushInBuffer;
ComPortReturnString := '';
ComPortDoneFlag := False;
ComPortReturnErrorFlag := False;
ApdComPort.PutString(ATCommand);
ApdComPort.PutChar(#13);
ApdComPort.PutChar(#10); //waiting for
j := 0;
while ((ComPortDoneFlag = False) and (ComPortReturnErrorFlag = False) and ( j < waiting)) do begin
J := J + 1;
Sleep(100); Application.ProcessMessages();
end; Getmem(Tempstr,255); Temp:=ComPortReturnString;
Temp := StringReplace(Temp,ATCommand,'',[rfReplaceAll]);
Temp := StringReplace(Temp,#13,'',[rfReplaceAll]);
Temp := StringReplace(Temp,#10,'',[rfReplaceAll]);
StrPcopy(Tempstr,Temp);
Result:=Tempstr;
end;====================================================================================运行到Application.ProcessMessages();时,程序开始处理消息事件,消息事件代码如下:
====================================================================================
class procedure TTempProc.ApdComPortTriggerAvailWithReturnOKString(CP: TObject; Count: Word);
var
I : Word;
TempComPortReturnString:array [0..254] of char;
//Temp:Pchar;
begin
GetMem(ComPortReturnString,255);
TempComPortReturnString:='';
//getmem(Temp,255);
for I := 1 to Count do begin
TempComPortReturnString[I-1] := (CP as TApdComPort).GetChar;
ComPortDoneFlag:=Pos('OK',TempComPortReturnString)>0;
ComPortReturnErrorFlag:=Pos('ERROR',TempComPortReturnString)>0;
end;
strpcopy(ComPortReturnString,TempComPortReturnString);end;
=======================================================================================
可是当处理完消息事件要出来的时候却出不来了,提示:"Access violation at address 012212F5 in module 'qtintf.dll'.Read of address 0000001C."要怎么解决呢?
解决方案 »
- access数据表 select查询的问题,具体在贴内
- delphi中advstringgrid怎样让某个单元格获取焦点
- delphi如何开发Windows CE下运行的程序
- 公式分析,救急!!
- 请教:做的程序老是出现msado15.dll的错误,怎么回事呢?用的win2k Pro,D7,Access 2000!
- cxgrid的打印输出问题?(20分)
- 为何我的消息无法解发其处理过程
- 建议:所有程序员打工者联合起来,推荐一些值得去的好公司,揭露一些去不得的公司!
- 如何把ACCESS数据库里的数据导入DBF文件(用代码)?
- 读取DLL传递参数时乱码.求救!![100分求解]
- 一MM原创:一个月内妹妹打了三次胎
- fastreport 问题,熟悉的帮忙解答啊!!!
能在windows下运行的库
如果你的程序中用了以Q开头的单元就会需要1。检查'qtintf.dll'是否存在
2。检查Q单元开头的(CLX)控件 的使用是否有问题你的代码太长不好检查,你可以自己仔细检查下所用的CLX
我这个程式,其实就是用ApdPort控件实现串口数据的发送和接收,当我发送完数据后,需要运行Application.Processmessages(),将程序停下来处理串口的接收缓冲区的数据,而Application就是属于QForms单元呀,如果我不用Application.Processmessages(),程序就不会停下来处理接收缓冲区的数据,有高手帮我看看,应该怎么处理呢?或者有什么另外的好的方法?谢谢了
2、可能需要qtintf.dll 却找不见,你试着把它放到dll的目录下。
1、数组没有释放;
这里面用到的数组就是消息事件里的char型数组TempComPortReturnString了.我将同样的代码放到工程文件里就没有问题,但在Dll里就会报错,是因为这个数组没释放吗?它不是一个动态数组,那要怎么释放呢?
=================================================================
class procedure TTempProc.ApdComPortTriggerAvailWithReturnOKString(CP: TObject; Count: Word);
var
I : Word;
TempComPortReturnString:array [0..254] of char;
//Temp:Pchar;
begin
GetMem(ComPortReturnString,255);
TempComPortReturnString:='';
//getmem(Temp,255);
for I := 1 to Count do begin
TempComPortReturnString[I-1] := (CP as TApdComPort).GetChar;
ComPortDoneFlag:=Pos('OK',TempComPortReturnString)>0;
ComPortReturnErrorFlag:=Pos('ERROR',TempComPortReturnString)>0;
end;
strpcopy(ComPortReturnString,TempComPortReturnString);end;
==================================================================2、可能需要qtintf.dll 却找不见,你试着把它放到dll的目录下。
这个方法我试了,不行,还是同样的问题.