hola Federico.
bueno lo tengo aislado porque hay muchos programas que usan esta DLL, lo que estoy haciendo es mi propia version de la DLL, por lo que tengo que dejarle las mismas funciones y procedimientos o mas bien dejarle los mismo nombres.
estuve haciendo la DLL en visual para usar el MSComm y realmente habian mas problemas, en algunos lados me reconocia la DLL en otros no. por lo que opte a hacerla en delphi que es donde esta hecha actualmente la DLL original.
porque dices que mi codigo esta incompleto? solo hace falta ahi la estructura de la funcion "AbrirPuerto". aquie te la agrego.
Código Delphi
[-]
procedure AbrirPuerto(Puerto,velocidad,paridad,tamano,parada: String);stdcall;
const
RxBufferSize = 256;
TxBufferSize = 256;
var
DCB: TDCB;
Config: string;
CommTimeouts: TCommTimeouts;
DeviceName: array[0..80] of Char;
begin
cerrarpuerto;
StrPCopy(DeviceName, (Puerto));
ComFile := CreateFile(DeviceName, GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if ComFile = INVALID_HANDLE_VALUE then
begin
Result := False
end
else
begin
Result := True;
end;
Result := True;
if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then
Result := False;
if not GetCommState(ComFile, DCB) then
Result := False;
Config := 'baud='+ velocidad +' parity='+ paridad + 'data='+ tamano + ' stop='+parada;
if not BuildCommDCB(@Config[1], DCB) then
Result := False;
if not SetCommState(ComFile, DCB) then
Result := False;
with CommTimeouts do
begin
ReadIntervalTimeout := $FFFFFFFF; ReadTotalTimeoutMultiplier := 0;
ReadTotalTimeoutConstant := 1000; WriteTotalTimeoutMultiplier := 0;
WriteTotalTimeoutConstant := 1000; end;
if not SetCommTimeouts(ComFile, CommTimeouts) then
Result := False;
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
end;
estuve tratando cambiandole el tipo de dato a PChar y bueno al hacer la lectura la primera vez no sale nada, hago la lectura nuevamente y se sale solo de la aplicacion.