![]() |
Error al accesar una funcion en una DLL
Bueno..es mi primera vez con las DLL.
He creado una DLL con varios procedimientos y funciones hasta el momento me han funcionado bien, sin embargo he declarado algo muy simple y me aparece un error que no tengo idea porque sucede, me explico:
y lo llamo asi:
y este es el mensaje de error: Cita:
|
Creo que olvidaste poner el "StdCall" en la "aplicaión normal". Así que cuando lo llamas no recibe los parámetros de la forma que espera, lo que se traduce en el error.
|
ok, bueno la he redeclarado asi:
y ahora si la ejecuto solamente a ella y cierro el formulario todo bien. Si ejecuto ademas otra funcion de la dll al cerrar el formulario me aparece este error: Cita:
Gracias nuevamente por la ayuda. |
Hola,
Ignoro si es por eso, pero, me parece que no puedes usar "strings" como parámetros ni como resultados, sino es añadiendo una determinada "unidad" de Delphi, de cuyo nombre no puedo acordarme ahora. El caso es que podrías probar algo como esto:
Y:
|
Error común.
|
Ok, anotado y comprobado, no usar string sino PChar.............pero.........
ya con el codigo que realmente debe de ir (el resultado es una cadena identica a la que anteriormente mostre)
PuertoS es una instancia de un Componente (TComPort) el cual ya fue creado (dinamicamente) antes de llamar a esta funcion. al compilar la dll me dice que son tipos incompatibles string y PChar ¿y 'ora? |
Hola,
Algo como esto, quizás:
|
Ya lo sabia Dec!!
Solo estaba poniendo a prueba tus conocimientos....:D:D:D Gracias ya funciono.....amenazo con regresar |
Lo prometido es deuda ¡ya regrese!
Si uso TcomPort como un componente dentro de un form ("soltado" desde la paleta) y quisiera guardar su configuracion lo haria asi:
Ahora como estoy jugando con la DLL he declarado esto:
y lo llamo asi:
el error que me manda Cita:
¡Esa si no me la se DEC! Gracias por la ayuda y disculpas por ser tan pesado. |
Hola,
En este caso la excepción la produce el propio componente "ComPort". No sé. Yo empezaría por ver exactamente dónde "levanta" dicha excepción el componente, a ver qué está pasando ahí: igual no existe el archivo u otra cosa. Si tienes el código fuente de l componente "ComPort" busca entre sus unidades la cadena "Failed to store settings", o el tipo de excepción "EComPort", y a ver qué ves por ahí. Yo empezaría así, vamos... ;) |
Cita:
Un Pchar no es lo mismo que un string. Pchar es un puntero a una cadena de caracteres, y la información de la cadena comenzaria en la direción de memoria a la que apunta. Terminando que la información con el caracter nulo. (Cuantas veces se me ha colgado por olvidarme este fin de cadena). Un string, utiliza el primer byte(cuando lo estudie hace tiempo) para guardar la longitud de la cadena, y la información biene despues. En delphi existen funciones para pasar dse pchar a string y viceversa. Hace tiempo estuve practicando, algo parecido, y creo que mi solución fue: Reservar memoria: Longitud cadena + 1(Fin de cadena), utilizando un pchar para guardar la información. Llamar a la función de la dll, y esta despues de tomar la información libere la memoria. La verdad que hace tiempo de esto pero creo que me funciono. Espero no haber liado mucho. Saludos. |
continuo en lo mismo...
Si vi el error de que lo genera el componente... supongo entonces que el problema estriba en la creacion del componente. Algo falta. revise el codigo del componente y encontre que :
y que :
siguiendo, yo creo en la dll :
La pregunta para los que tengan la paciencia de revisar tantas lineas ¿es correcto como estoy creando el componente? Reitero mi agradecimiento a la ayuda que puedan prestar. P.d. Gracias Io por la explicacion de Pchar y Sting. |
La franja horaria es GMT +2. Ahora son las 12:47:54. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi