Page 1 of 1
Diferencia entre GetProc32 y GetProcAddress ?
Posted: Thu Jun 15, 2006 12:11 pm
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
Posted: Thu Jun 15, 2006 2:20 pm
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
Posted: Thu Jun 15, 2006 6:34 pm
by Antonio Linares
GetProc32() es una función para ser usada con Clipper, no con Harbour/xharbour.
Posted: Fri Jun 16, 2006 7:46 am
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.
Posted: Fri Jun 16, 2006 12:46 pm
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.
Posted: Tue Jun 20, 2006 7:13 am
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.
Posted: Tue Jun 20, 2006 3:40 pm
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.
Posted: Wed Jun 21, 2006 6:38 am
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.
Posted: Wed Jun 21, 2006 3:22 pm
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.