Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > ASM y Microcontroladores
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 06-04-2009
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.964
Poder: 29
delphi.com.ar Va camino a la fama
Sigo viendo incoherente te código, entiendo que lo debes haber recortado de tu aplicación. Fijate el tratamiento que haces con la variable Result, primero que no se trata de una función sino de un procedure, luego le asignas un valor y posteriormente lo sobreescribes a True. Los parámetros de este procedimiento siguen siendo "String". Ademas, veo que en las funciones anteriores no se le da importancia al resultado de "AbirPuerto".

Hice un breve resumen de la DLL si cambiar las partes que no entiendo del código, y no me falla, salvo que no exista el puerto o este este abierto.
Código Delphi [-]
library dllcredicard;

uses
  SysUtils,
  Classes,
  Windows,
  Math;

var
  hComFile: THandle;

procedure CerrarPuerto;
begin
  CloseHandle(hComFile);
end;

function AbrirPuerto(Puerto, velocidad, paridad, tamano, parada: PChar): boolean;
const
  RxBufferSize = 256;
  TxBufferSize = 256;
var
  DCB: TDCB;
  Config: string;
  CommTimeouts: TCommTimeouts;
begin
  CerrarPuerto;

  hComFile := CreateFile(Puerto, GENERIC_READ or GENERIC_WRITE, 0,  nil,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,  0);

  Config := 'baud=' + velocidad + ' parity=' + paridad + 'data=' + tamano + ' stop=' + parada;

  with CommTimeouts do
  begin
    ReadIntervalTimeout         := $FFFFFFFF;
    ReadTotalTimeoutMultiplier  := 0;
    ReadTotalTimeoutConstant    := 1000;
    WriteTotalTimeoutMultiplier := 0;
    WriteTotalTimeoutConstant   := 1000;
  end;

  Result :=(hComFile <> INVALID_HANDLE_VALUE) and
            SetupComm(hComFile, RxBufferSize, TxBufferSize) and
            GetCommState(hComFile, DCB) and
            BuildCommDCB(@Config[1], DCB) and
            SetCommState(hComFile, DCB) and
            SetCommTimeouts(hComFile, CommTimeouts);
end;

procedure Banda;stdcall;
var
  Bytes: DWORD;
const
  Texto = #2'Z1'#3'h'#2'Z903'#3'c';
begin
  WriteFile(hComFile, Texto[1], Length(Texto), Bytes, nil);
end;

function leebanda(var Buff: PChar; Size: DWORD): DWORD; stdcall;
var
  sTmp: string;
  c1,rebut: integer;
  chBuffer: array[0..150] of char;
  NumberOfBytesRead: dword;
begin
  Result := 0;
  if AbrirPuerto('COM4','19200','N','8','2') then
    try
      Banda;
      repeat
        rebut:=0;
        repeat
          if hComFile=INVALID_HANDLE_VALUE then
            Exit;

          if not ReadFile(hComFile, chBuffer[rebut],1, NumberOfBytesRead, nil) then
          begin
            Result := INVALID_HANDLE_VALUE;

          end else
            for c1 := 0 to NumberOfBytesRead - 1 do
              sTmp:= sTmp + chBuffer[c1];

        until (rebut<100) and (Result = 0);

        if chBuffer[rebut]=chr(04) then
          CerrarPuerto;

      until (rebut=100) and (Result = 0);

      if Result = 0 then
      begin
        Result := Length(sTmp);
        StrLCopy(Buff, @sTmp[1], Min(Size, Result));
      end;
    finally
      CerrarPuerto;
    end;
end;

exports
  leebanda;

begin
end.
Cita:
Private Declare Function leebanda Lib "dllcredicard.dll" (ByRef Buff As String, Size As Long) As Long

Private Function DoLeeBanda() As String
Dim Buff As String * 255
Dim lLen As Long
lLen = leebanda(Buff, 255)
DoLeeBanda = Left$(Buff, lLen)
End Function

Private Sub boton_leer_banda_Click()
Caption = Now & ">" & DoLeeBanda & "<"
End Sub
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error al LLamar un DLL, "memoria Insuficiente" clavijo83 Varios 0 02-04-2009 18:34:50
Lectura Hexadecimal desde el puerto serie djemix Varios 20 09-12-2007 15:22:55
Particiones en "solo lectura " con cd_live de knoppix Diavlo Linux 1 03-10-2007 04:06:26
error de sql server "Informacion de columna clave insuficiente" jhcaboverde Conexión con bases de datos 1 17-08-2007 19:40:31
Fast Report "Fuera de memoria" BECERRA Impresión 0 25-12-2005 12:40:29


La franja horaria es GMT +2. Ahora son las 12:41:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi