Delphi - Dll's y parametros

 
Vista:

Dll's y parametros

Publicado por Mariposa Mental (9 intervenciones) el 18/08/2005 12:22:04
Hola a todos,
Tengo un programa en Delphi y una dll también en Delphi. Mi problema es que quiero recorrerme en la dll una consulta pasada por parámetro a un procedimiento, tipo TIBSQL o dataset, puedo acceder a ella sin ningún problema para moverme, recorrerla... pero al acceder a los campos de tipo string me da error de Access Violation....
Con los campos de tipo integer no hay ningún problema.

He usado la unidad ShareMem, pero sigo con el mismo error.
¿Cómo puedo acceder a esos campos? ¿Habría otra manera de pasárselo?

Me interesa pasarle una consulta o una tabla porque aparte de que son muchos campos los que le tendría que pasar, estos pueden cambiar en un futuro próximo y no querría rehacer todo el programa sino sólo la dll.

Muchas gracias por su ayuda, un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Dll's y parametros

Publicado por emilio (78 intervenciones) el 18/08/2005 14:18:07
Cambia el tipo de tados de String a Pchar aso no tendras q usar ShareMen ademas si utlilizas ShareMen debes declararlo en la DLL y en la Unit q trabaja con la funcion , en la Unit debes declararlo antes de todas las demas declaraciones q hay en los USES.

My consejo es q utilises PCHAR en ves de String asi se quitara el error.

CHAOOOOO>>> si tienes mas dudas escribeme un corre y te hecho una mano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dll's y parametros

Publicado por Mariposa Mental (9 intervenciones) el 19/08/2005 11:10:17
Hola y gracias por la respuesta, pero eso creo que ya lo he probado. :S
Yo le paso como parámetro un TIBSQL o un TIBDataSet y al acceder a los campos de la siguiente manera:
Q.FieldByName('NOMBRE').AsString es cuando da error.

No puedo acceder a ese campo como PChar o por lo menos ahora no se me ocurre cómo. Si me pudieras decir cómo se hace, si se puede, te lo agradecería.

Lo del ShareMem lo hice pero claro sigue sin funcionar porque accedo como string.

Gracias, un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dll's y parametros

Publicado por Mariposa Mental (9 intervenciones) el 22/08/2005 13:34:27
Hola, por favor no hay nadie que me pueda resolver esta duda??

Gracias, es que es un poco urgente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dll's y parametros

Publicado por emilio (78 intervenciones) el 22/08/2005 14:14:34
Hola mira rfealmante no se q recomendarte pporque si ya has probado esas soluciones q te plantie entonces el proble es grande

Pero me gustaria confirmar q fue algo parecido a esto lo q utilizases
S:=PCHAR(Q.FieldByName('NOMBRE').AsString);

creo q si lo q tu deseas es aceder a los campos de la tabla, deberias probar pasar el campo a una variable del tipo pchar. claro es es para gestionar el valor del campo y realmente no se ti funciona.



Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dll's y parametros

Publicado por Mariposa Mental (9 intervenciones) el 23/08/2005 11:07:30
Hola y gracias por contestar.
El problema es que el cast ha PChar creo que no me vale por la siguiente razón y dime si estoy equivocada.

Yo tengo un procedimiento en la dll que es:
procedure RellenaFicheroClientes(QClientes:TIBSQL);

Lo necesito así porque no le puedo pasar cada uno de los campos individualmente por parámetro, aparte de porque son muchos, porque pueden variar, puedo añadir... Y lo de hacerlo con una dll es para si cambia algo del traspaso (es un traspaso a contabilidad) cambiarlo únicamente en la dll.

Creo que al pasárselo con un query, que yo me recorro en la dll, como ya se han pasado como tipo string (internamente en el query), aunque en la dll lo trate como PChar, no sirve de nada.

Bueno, por lo menos eso creo.... no sé si me habré explicado.

También he pensado en crearme un record pero estoy en lo mismo, tengo que declararlo en ambos sitios y si se añade algún campo tengo que modificar tanto el programa como la dll.

Lo más seguro es que esté equivocada en el planteamiento, sino lo juntaré y menos problemas. :S

Gracias por tu ayuda. :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dll's y parametros

Publicado por emilio (78 intervenciones) el 23/08/2005 14:34:37
Yo ley en un libro q las dlls pueden trabajr con variables de tipo String pero dentro de ellas mismas si el valor de la cadena debe salir o lo q es lo mismo debe ser utilizado porteriormente fuera de la dll entoces es cuando se produce el error.

lo cual quiere decir q el error realmente se esta produciendo en lo q devuelve tu IBSQL. Lamento no poderte ayudar, porque no se me ocurre ninguna solucion.

En cuanto a lo del record si lo intentas puedes implementarlo en un archivo include ( .inc ) esto te permitira modificarlo con facilidad cada ves q se añada algun campo sin modificar el ejecutable. Ya q sabes q los archivos includes son TXT q se guardan en la misma carpeta del programa y delphi acede a ellos para leer declaraciones de variables, tipos y constantes. Si te gusta la idea te puedo ayudar si, claro si me lo permites.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dll's y parametros

Publicado por Mariposa Mental (9 intervenciones) el 24/08/2005 09:44:34
Gracias, lo intentaré, si necesito más ayuda ya os lo digo. Gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dll's y parametros

Publicado por Mr. Sade (6 intervenciones) el 23/08/2005 16:20:59
si gustas puedes hacer un programa pequeño que reprodusca el error y enviar el codigo y el exe del demo y yo con un debugger vere que pasa. yo puedo pasar strings a una dll normalmente pero nunca intente pr medio de TIBSQL, pero si me envias a mi email que se ve arriba un ejemplo podria tratar de ayudarte.
usando un debugger puede ver que pasa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dll's y parametros

Publicado por Mariposa Mental (9 intervenciones) el 24/08/2005 09:45:51
Gracias, probaré primero lo que me ha comentado Emilio, si no consigo que me funcione ya os pediré más ayuda :P

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar