Diferencia entre GetProc32 y GetProcAddress ?

Diferencia entre GetProc32 y GetProcAddress ?

Postby Andrés González » Thu Jun 15, 2006 12:11 pm

Antonio, estoy haciendo pruebas con dos versiones distintas de Cristal Reports (TCRW y TCRW32) en el segundo aparece GetProc32, pero me da un error en esa funcion. Parece por logica que esta funcion "GetProc32" sea exlusivo de 32-bit, pero me genera un error cuando lo ejecuto, en cambio si con los mismos argumentos utilizo GetProcAddress funciona a la perfección incluso veo que hace la discriminacion entre 16-bit y 32-bit (al seleccionar la libreria). ¿ A que es debido el error ?, ¿ Que funcion tengo que utilizar o falta algun argumento ?

En TCRW:
Code: Select all  Expand view  RUN

METHOD PEOPEN_()
   LOCAL cFarProc
   LOCAL cFunc := "PEOpenEngine"
   cFarProc := GetProcAddress( ::hDLL, cFunc, .T., LONG )
   ::lError := ( CallDll( cFarProc ) == FALSE )
   IF ::lError
      MsgAlert( "Could not open the Print Engine!" + CRLF + ::PeErrorText())
   ENDIF
RETURN ! ::lError





En TCRW32:
Code: Select all  Expand view  RUN

METHOD PEOPEN_()
LOCAL cFarProc
LOCAL cFunc := "PEOpenEngine"

    IF ::l32
      
       cFarProc := GetProc32( ::hDLL, cFunc, .T., LONG )
       ::lError := ( CallDll32( cFarProc ) == FALSE )

    ELSE
      
       cFarProc := GetProcAddress( ::hDLL, cFunc, .T., _INT )
       ::lError := ( CallDll( cFarProc ) == FALSE )

    ENDIF

    IF ::lError
       MsgAlert( "No puedo abrir el reporte.!" + CRLF + ::PeErrorText())
    ENDIF

RETURN ! ::lError
User avatar
Andrés González
 
Posts: 629
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Postby R.F. » Thu Jun 15, 2006 2:20 pm

No reinventes el hilo negro, la clase Cystal ya esta lista para 32 bits, descargala de aqui:

http://www.google.d2g.com/crystal.zip

Clase y ejemplo incluido
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby Antonio Linares » Thu Jun 15, 2006 6:34 pm

GetProc32() es una función para ser usada con Clipper, no con Harbour/xharbour.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42149
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Andrés González » Fri Jun 16, 2006 7:46 am

Gracias Antonio, con tus respuestas ahorro mucho tiempo, la verdad no podia imaginarme que era para clipper.

Rene me gusta tu apreciacion de no reinventar el hilo negro. Normalmente cuando pasa esto es que quieres sacarle mas partido a lo que tienes. He consultado la ayuda de crystal Reports y le podemos sacar mucho mas partido a la clase, añadiendole cositas y en eso estoy. Tengo una clase la TCRW32, que la verdad no se de donde me ha salido pero tiene algunas diferencias con respecto a la tuya y utilizando el visor de dll mediante (http://www.dependencywalker.com/) - que es libre -, he podido averiguar que hay muchas cosas que se nos quedan en el tintero. Ademas en la ayuda del developer help de Crystal indica un monton de funciones muy utiles para los desarrolladores que no empleamos. Te dege un mensaje hace tiempo preguntandote cosas puesto que yo la verdad no estoy tan avanzado como tu y muchas cosas las ignoro. Estoy realizando un ejemplo de modificacion de la formula de seleccion para que asi el usuario cambie las condiciones del reporte en tiempo de ejecución y funciona perfectamente pero aun lo estoy optimizando. Creo que la gente ignora las bondades de la clase Crystal, y creo que si añadimos mas utilidades al wapper de crystal podemos ayudar a mucha gente, e indudablemete hoy por hoy este diseñador es de los mas punteros, cosa facil ver con su integración en otros lenguajes de programación y la verdad herramientas como esta son las que necesitan nuestros programas puesto que te evitan muchas lineas de codigo.
Desde que sacaron la clase la estoy utilizando, pero tan solo a nivel de reporte prediseñado. Esto supuso un avance en nuestra organizacion pero como siempre ahora la gente pide mas y quieren poder cambiar las condiciones de seleccion, poner un titulo, añadir un logo, que el reporte sea mas rapido, etc. En la ayuda del desarrollador crystal todo esto está y son funciones que aun no estan en la clase y por eso creo que tu apreciacion de no reinventar el hilo negro en este caso no se ajusta a la realidad. De todas maneras Rene no te tomes a mal este comentario, puesto que con gente como tu hemos y estamos aprendiendo muchos y lo unico que tengo son elogios a tu esfuerzo.

Un saludo.
User avatar
Andrés González
 
Posts: 629
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Postby R.F. » Fri Jun 16, 2006 12:46 pm

Entre nosotros.... la solucion de la clase TCRPE es un pelin complicada, jejeje
si lo haces por OLE todo va mucho mas rapido, porque no tienes que wrappear ninguna funcion.

oCrystal := TOLEAUTO():New("Crystal.CRPE.Application")

Y a partir de ahi haces todo lo que quieras.
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby Andrés González » Tue Jun 20, 2006 7:13 am

Rene se puede leer una dll con autoole sin tenerla instalada. Creo que la respuesta es que no, que necesitas registrarla antes de utilizarla.

Si se pudiera hacer algo similar a:



Code: Select all  Expand view  RUN

::hDll := LoadLibrary("CRPE32.DLL")

  IF ABS( ::hDll ) >= 32
     oCrystal := TOLEAUTO():New("Crystal.CRPE.Application")
  ENDIF



Esto seria lo ideal, se que el mismo crystal tiene un exe para registrar la clase y luego manejarla con los comandos ole, y seguro que es mucho mas comodo. Pero luego como lo distribuyes, tienes que hacer un instal que haga lo propio con el registro. En nuestro caso tenemos problemas con la utilización de system y system2 por las politicas de seguridad, y la verad no quiero pasarme 40 ordneadores uno por uno registrando la clase.

Un saludo.
User avatar
Andrés González
 
Posts: 629
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Postby R.F. » Tue Jun 20, 2006 3:40 pm

De todas formas la solucion no te va a servir....

Tienes que distribuir las 14 DLL de Crystal para que te funcione el informe y esas DLLs tienen que ir instaladas en los ordenadores donde vas a ejecutar el programa, no pueden ir en el servidor.
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby Andrés González » Wed Jun 21, 2006 6:38 am

Rene por eso utilizamos la clase de TCRW, no nos da ningun problema y funciona a las mil maravillas en el servidor sin instalar ninguna dll en los ordenadores que lo emplean. De ahi la cuestion inicial de que necesito añadirle varias cosas mas a la clase para que haga todas estas cosas. De momento con lo que tengo ya puedo recuperar la formula de seleccion y combinarla con codigo de fivewin y luego integrarla de nuevo en el reporte sacando distintos reportes en tiempo de ejecucion.
Pregunta ¿ Rene tu utilizas la clase o lo haces atraves de los comandos OLE?.

Un saludo.
User avatar
Andrés González
 
Posts: 629
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Postby R.F. » Wed Jun 21, 2006 3:22 pm

Yo usaba la clase Crystal para 16 bits, luego cuando pase mis aplicaciones a 32 bits, hice la version compatible, sin embargo, me di cuenta que para utilizar Crystal con otras interfases graficas y aun desde el mismo (x)Harbour puro y duro, era mas facil utilizarlo por OLE asi que adapte todo para funcionar por OLE y tengo mucha mas verastilidad.

Por el lado de la instalacion y registro del componente COM no tengo problema, el InnoSetup se encarga de eso.
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 44 guests