我的程式代码如下:======================================================================================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."要怎么解决呢?

解决方案 »

  1.   

    qtintf.dll是delphi6为支持Kylix为Linux
    能在windows下运行的库
    如果你的程序中用了以Q开头的单元就会需要1。检查'qtintf.dll'是否存在
    2。检查Q单元开头的(CLX)控件 的使用是否有问题你的代码太长不好检查,你可以自己仔细检查下所用的CLX
      

  2.   

    To:ss__328(潇潇) :
    我这个程式,其实就是用ApdPort控件实现串口数据的发送和接收,当我发送完数据后,需要运行Application.Processmessages(),将程序停下来处理串口的接收缓冲区的数据,而Application就是属于QForms单元呀,如果我不用Application.Processmessages(),程序就不会停下来处理接收缓冲区的数据,有高手帮我看看,应该怎么处理呢?或者有什么另外的好的方法?谢谢了
      

  3.   

    这在DLL里才有问题,在正常的工程文件中运行就没有这样的问题了.我真郁闷哪?不知道怎么办才好?
      

  4.   

    两个可能:1、数组没有释放;
    2、可能需要qtintf.dll 却找不见,你试着把它放到dll的目录下。
      

  5.   

    To: IUPRG(遨云驰行,琢符弄图) 你说的这两个方法我都试了:
    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的目录下。
    这个方法我试了,不行,还是同样的问题.