Access Violation con DLL
Hola a todos...
Tengo una situación bastante extraña que no logro explicarme porque pasa, así que les cuento a ver si ven que puede ser... Estoy utilizando una DLL compilada en "C", que su unica funcion (sumatoria) tiene 2 parametros de entrada y su salida es la suma de ambos... En delphi creo la funcion:
Lo extraño es que cuando llamo a la funcion de ésta manera: el resultado es correcto, o sea, me devuelve la suma de los valores que hay en los edits... Pero aqui viene lo extraño: si en vez de hacer el strtoint de los edits para pasarle los parametros a la funcion, directamente pondo dos numeros enteros, o sea: salta un error de acces violation !!! es realmente muy raro... También probé: y da el mismo error... es muy raro... Alguien sabe que puede ser??? muchas gacias, salu2 |
Estaría bien que pusieras el código en C, seguramente ahí esta el problema.
|
Es probable que no estés importando la función correctamente. Quizá el tipo de llamada de la función original no es StdCall. Lo que dice Domingo es importante, ¿podrías mostrarnos la cabecera de esa función de C.
Un abrazo importado. Al González. :) |
gracias por las prontas respuestas :)
la funcion de C es bien sencilla, simplemente suma las dos entradas, algo así: int sumatoria (int A, int B) { int C; C=A+B; result(C); } |
Prueba con algo asi:
Código:
int stdcall sumatoria (int A, int B) |
A mi me parece que la declaración en Delphi debería ser algo como ésto:
pues muy probablemente esté pasando como puntero los valores... Claro que solo "supongo" |
gracias !!! funcionó finalmente...
el poner var en los parametros de la funcion no funcionó porque se quejaba que no se pueden pasar variables, dice que tienen que ser constantes... la solución fue poner stdcall en la funcion de C, ojo, va con doble subgueon antes... y para poder pasar reales, ojo que con el formato de C float se compatibiliza con el single de delphi... dejo aquí la solucion final:
y la funcion de C es:
MUCHAS GRACIAS A TODOSSSSSS !!!!!! :):):):) D:D:D:D |
¡Hola a todos!
¿Así que eran flotantes y no enteros? Haber empezado por ahí compadre. :rolleyes: Un abrazo sin omisiones. Al González. :) |
no, no... inicialmente eran enteros... hice todas las pruebas con enteros y funcionó, y luego pasé a enteros y tambien funcionó teniendo en cuenta eso de los singles... lo aclaré luego para que si alguno necesitaba pasar reales ya tuviera esa solucion ;)
salu2 |
La franja horaria es GMT +2. Ahora son las 18:17:12. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi