Leer una DLL externa
Publicado: Mié Nov 09, 2005 12:52 pm
Saludos:
Tengo un aparato que utiliza para su lectura el puerto serie, pero la
casa que lo comercializa me ha enviado un DLL que realiza la lectura por el
puerto que se designe, el DLL contiene una serie de procedures con arreglo a
lo que quieres que te envie de respuesta o grabación por el puerto solo
necesito saber como puedo implementar esto que pongo hecho en otro lenguaje
en Xailer.
_DLL FUNC read_transp_can(com_port AS INT,start_data AS INT, ring_id AS
PTR,max_data AS INT, rec_data AS PTR,error_code AS PTR) AS VOID
PASCAL:benzing_com.read_transp_can
read_transp_id es el procedure que debo leer en el DLL que se llama
benzing_com
La llamada a dicha Función se hace así:
METHOD OKButton( ) CLASS MainDialog
*
LOCAL nPort := 0 AS INT
LOCAL nStar := 0 AS INT
LOCAL nBuffer := 10 AS INT
LOCAL DIM cBuffer[10] AS BYTE
LOCAL nData := 0 AS INT
LOCAL nError := 0 AS INT
LOCAL i AS INT
LOCAL cError AS STRING
*
** Borrar el contenido del SLEdit
SELF:oDCRingSLE:TextValue := ""
*
** Según el botón seleccionado activa el
** número de puerto
IF SELF:oCCComRButton1:Pressed
nPort := 1
ELSE
nPort := 2
ENDIF
*
*
** Llama al metodo que a su vez llama al DLL
read_transp_can(nPort,nStar,@cBuffer,nBuffer,@nData,@nError)
** Si tiene errores o el nData está vacio
IF nError > 0 .OR. nData = 0
*
DO CASE
CASE nError == 12
cError := "Comando no permitido."
CASE nError == 13
cError := "Parametro no permitido."
CASE nError == 20
cError := "Error general de comuninaciones."
CASE nError == 30
cError := "Error general de lectura."
CASE nError == 31
cError := "Antena CAM no conectada."
CASE nError == 32
cError := "La antena CAM no responde."
CASE nError == 95
cError := "Puerto no abierto."
CASE nError == 97
cError := "No responde."
OTHERWISE
cError := "Error número " + CHR(nError)
ENDCASE
*
(ErrorBox{SELF,cError}):Show()
** Si no tiene errores y el nData no está vacio
ELSE
*
FOR i := 1 TO nData
*
SELF:oDCRingSLE:TextValue += CHR(cBuffer)
*
NEXT
*
ENDIF
RETURN NIL
Espero que alguien me pueda decir algo.
José Ramón Castro Polinio.
Tengo un aparato que utiliza para su lectura el puerto serie, pero la
casa que lo comercializa me ha enviado un DLL que realiza la lectura por el
puerto que se designe, el DLL contiene una serie de procedures con arreglo a
lo que quieres que te envie de respuesta o grabación por el puerto solo
necesito saber como puedo implementar esto que pongo hecho en otro lenguaje
en Xailer.
_DLL FUNC read_transp_can(com_port AS INT,start_data AS INT, ring_id AS
PTR,max_data AS INT, rec_data AS PTR,error_code AS PTR) AS VOID
PASCAL:benzing_com.read_transp_can
read_transp_id es el procedure que debo leer en el DLL que se llama
benzing_com
La llamada a dicha Función se hace así:
METHOD OKButton( ) CLASS MainDialog
*
LOCAL nPort := 0 AS INT
LOCAL nStar := 0 AS INT
LOCAL nBuffer := 10 AS INT
LOCAL DIM cBuffer[10] AS BYTE
LOCAL nData := 0 AS INT
LOCAL nError := 0 AS INT
LOCAL i AS INT
LOCAL cError AS STRING
*
** Borrar el contenido del SLEdit
SELF:oDCRingSLE:TextValue := ""
*
** Según el botón seleccionado activa el
** número de puerto
IF SELF:oCCComRButton1:Pressed
nPort := 1
ELSE
nPort := 2
ENDIF
*
*
** Llama al metodo que a su vez llama al DLL
read_transp_can(nPort,nStar,@cBuffer,nBuffer,@nData,@nError)
** Si tiene errores o el nData está vacio
IF nError > 0 .OR. nData = 0
*
DO CASE
CASE nError == 12
cError := "Comando no permitido."
CASE nError == 13
cError := "Parametro no permitido."
CASE nError == 20
cError := "Error general de comuninaciones."
CASE nError == 30
cError := "Error general de lectura."
CASE nError == 31
cError := "Antena CAM no conectada."
CASE nError == 32
cError := "La antena CAM no responde."
CASE nError == 95
cError := "Puerto no abierto."
CASE nError == 97
cError := "No responde."
OTHERWISE
cError := "Error número " + CHR(nError)
ENDCASE
*
(ErrorBox{SELF,cError}):Show()
** Si no tiene errores y el nData no está vacio
ELSE
*
FOR i := 1 TO nData
*
SELF:oDCRingSLE:TextValue += CHR(cBuffer)
*
NEXT
*
ENDIF
RETURN NIL
Espero que alguien me pueda decir algo.
José Ramón Castro Polinio.