Página 1 de 1

Leer una DLL externa

Publicado: Mié Nov 09, 2005 12:52 pm
por jrcpoli
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.

Leer una DLL externa

Publicado: Jue Nov 10, 2005 9:31 am
por ignacio
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.
>
>

Leer una DLL externa

Publicado: Mié Nov 16, 2005 11:20 pm
por jrcpoli
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.
>>
>>
>
>