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.
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Leer una DLL externa
Leer una DLL externa
José Ramón Castro.
- ignacio
- Site Admin
- Mensajes: 9463
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Leer una DLL externa
José,
Revista en este mismo foro. Esta pregunta se ha respondido ya varias veces.
Saludos,
"José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
news:4371e2ec$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> 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.
>
>
Revista en este mismo foro. Esta pregunta se ha respondido ya varias veces.
Saludos,
"José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
news:4371e2ec$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> 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.
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Leer una DLL externa
Ignacio la respuesta ya existe, pero no he podido implementarla, por eso era
lo de mandaros un ejemplo completo y que vosotros los pasaraís a Xailer,
quizas me falte algún archivo "H", o no se lo que no hago solo se que
funciona con otro Compilador que quiero dejar, porque me siento más comodo
con Xailer y sin esto no puedo hacerlo, le he pedido ayuda a José F.Gimenez,
pero no he recibido respuesta a esta cuestión, quizas no ha tenido tiempo de
ayudarme, en fín si no implemento esta DLL externa no puedo continuar, el
ejemplo que me manda la casa para implementarla esta hecho en DELFI y por lo
tanto no me vale. Ni me vale lo que sé del otro lenguaje porque como verás
tampoco es igual a lo que tú pones en el anterior ejemplo, así que pido un
pequeño esfuerzo de ayuda.
José Ramón Castro Polinio.
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:4373054f$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> José,
>
> Revista en este mismo foro. Esta pregunta se ha respondido ya varias
> veces.
>
> Saludos,
>
> "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
> news:4371e2ec$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> 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.
>>
>>
>
>
lo de mandaros un ejemplo completo y que vosotros los pasaraís a Xailer,
quizas me falte algún archivo "H", o no se lo que no hago solo se que
funciona con otro Compilador que quiero dejar, porque me siento más comodo
con Xailer y sin esto no puedo hacerlo, le he pedido ayuda a José F.Gimenez,
pero no he recibido respuesta a esta cuestión, quizas no ha tenido tiempo de
ayudarme, en fín si no implemento esta DLL externa no puedo continuar, el
ejemplo que me manda la casa para implementarla esta hecho en DELFI y por lo
tanto no me vale. Ni me vale lo que sé del otro lenguaje porque como verás
tampoco es igual a lo que tú pones en el anterior ejemplo, así que pido un
pequeño esfuerzo de ayuda.
José Ramón Castro Polinio.
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:4373054f$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> José,
>
> Revista en este mismo foro. Esta pregunta se ha respondido ya varias
> veces.
>
> Saludos,
>
> "José R.Castro" <JRCPOLI@terra.es> escribió en el mensaje
> news:4371e2ec$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> 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.
>>
>>
>
>
José Ramón Castro.