Fórum Erro de Acessoá memória #589276
27/11/2017
0
Estou tentando implementar um BINA com Delphi 7 usando Super Bina!
Adicionei o componente no form e num botão fiz:
procedure TfrmPrincipal.btnAbreConClick(Sender: TObject);
var
texto: String;
begin
spBina.Conectado:=true;
spBina.LeiaDTMF(texto,100);
ShowMessage(texto);
end;
e no onDTMF fiz
procedure TfrmPrincipal.spBinaDTMF(Sender: TObject; Count: Integer);
var
Buffer : String;
Contador: Integer;
begin
// Define o valor do Time Out
Sleep(500);
// Confere o número total de bytes dentro do pacote enviado
Contador := spBina.InputCount;
// Lê o pacote enviado e armazena no Buffer
spBina.Read(Buffer, Contador);
// Alimenta um campo Memo com os dados recebidos
Memo1.Lines.Add(Buffer);
end;
Então,
no código do botão, ao chegar o ring da linha telefônica eu recebo RING no ShowMessage. Só isso!
no código do onDTMF, ao chegar spBina.Read(Buffer, Contador);, está dando erro de acesso à memória!
Como corrigir isso?
Adicionei o componente no form e num botão fiz:
procedure TfrmPrincipal.btnAbreConClick(Sender: TObject);
var
texto: String;
begin
spBina.Conectado:=true;
spBina.LeiaDTMF(texto,100);
ShowMessage(texto);
end;
e no onDTMF fiz
procedure TfrmPrincipal.spBinaDTMF(Sender: TObject; Count: Integer);
var
Buffer : String;
Contador: Integer;
begin
// Define o valor do Time Out
Sleep(500);
// Confere o número total de bytes dentro do pacote enviado
Contador := spBina.InputCount;
// Lê o pacote enviado e armazena no Buffer
spBina.Read(Buffer, Contador);
// Alimenta um campo Memo com os dados recebidos
Memo1.Lines.Add(Buffer);
end;
Então,
no código do botão, ao chegar o ring da linha telefônica eu recebo RING no ShowMessage. Só isso!
no código do onDTMF, ao chegar spBina.Read(Buffer, Contador);, está dando erro de acesso à memória!
Como corrigir isso?
Carlos Rocha
Curtir tópico
+ 0
Responder
Post mais votado
27/11/2017
// Ler no modo sincrono
function TSspBina.ReadAsync(var Buffer; Count: Integer; var AsyncPtr: PAsync): Integer;
var
Success: Boolean;
BytesTrans: DWORD;
begin
AsyncPtr^.Kind := okRead;
Success := ReadFile(FHandle, Buffer, Count, BytesTrans, @AsyncPtr^.Overlapped)
or (GetLastError = ERROR_IO_PENDING);
if not Success then
raise ECspBina.Create(CError_ReadFailed, GetLastError);
Result := BytesTrans;
end;
quando faz o ReadFile
function TSspBina.ReadAsync(var Buffer; Count: Integer; var AsyncPtr: PAsync): Integer;
var
Success: Boolean;
BytesTrans: DWORD;
begin
AsyncPtr^.Kind := okRead;
Success := ReadFile(FHandle, Buffer, Count, BytesTrans, @AsyncPtr^.Overlapped)
or (GetLastError = ERROR_IO_PENDING);
if not Success then
raise ECspBina.Create(CError_ReadFailed, GetLastError);
Result := BytesTrans;
end;
quando faz o ReadFile
Carlos Rocha
Responder
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)