Diferencia entre GetProc32 y GetProcAddress ?

Post Reply
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Diferencia entre GetProc32 y GetProcAddress ?

Post by Andrés González »

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


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


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
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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

Antonio Linares
www.fivetechsoft.com
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Post by Andrés González »

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.
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

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.
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Post by Andrés González »

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


::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.
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

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.
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Post by Andrés González »

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.
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

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.
Post Reply