Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problemas con DLL de MatLab (https://www.clubdelphi.com/foros/showthread.php?t=46444)

emeceuy 01-08-2007 07:02:21

problemas con DLL de MatLab
 
Hola a todos... bueno, la duda que planteo es la siguiente:

Tengo una aplicación de delphi, en la cual debo utilizar una DLL creada en matlab... para que sea facil y sin complicaciones creé una DLL en Matlab que sume 1 al valor de entrada, la pruebo en MatLab y funciona correctamente.

Ahora en delphi, utilizo una de las formas, que es definirme la funcion aclarando que es external y dando el nombre de la DLL. En primera instancia, al correr la funcion salta un error, que habla del puntero de iniciacion de la dll o algo así (no me acuerdo exactamente), pero luego encontré que tengo que indicarle la funcion de la DLL y agregar al final de la funcion (despues del nombre de la DLL) index 1 (en este caso)...

La funcion de la DLL tiene un parametro de entrada (entero) y su salida será otro entero. Si bien de esta manera no da errores, el resultado de la funcion, es un numero muy grande, como 200 millones y pico, creo... Probé poniendo como parametro de salida de la funcion un real, y al mostrar el resultado haciendo el floattostr es NAN (not a number).

Para variar un poco, modifiqué la DLL e hice que no tuviera parametros de entraeda, y que la salida sea un string. Al tratar de correrla en delphi, tampco hubo errores, pero la salida era un string vacío.

Que estoy haciendo mal? a mi me suena que es un tema de definicion de los tipos de variables utilizadas, si real, entero, string, byte, word, yo que se, creo que puede ser por ese lado... El tema es que en MatLab no se si se puede definir variables, o el programa se da cuenta por si solo que tipo es dependiendo del valor que se le cargue...

Que puede ser? me está volviendo loco este tema, parece no ser complicado, pero ya me lleva unas cuantas horas y nada, gran bajón !!! :o

les dejo la funcion en delphi
Código Delphi [-]
function fun_suma(A:integer):integer; stdcall; external 'suma.dll';

y el .m de matlab, que se llama suma.m sería

function B=fun_suma(A)
B=A+1

luego se genera la dll en matlab (suma.dll) y se prueba, sin problemas... también probé llamando al .m y a la .dll igual que la funcion (fun_suma) y tampoco funciona

cHackAll 01-08-2007 20:53:25

Con que tipo de valor numerico estará trabajando el MatLab ???? porque supones que es un entero con signo de -21.... a 21.... ??? por que no subes la dll?

PD: Subelo acá

emeceuy 01-08-2007 21:34:56

ya subí la DLL... muchas gracias !

en realidad no se si supongo lo del entero, no lo tengo claro, pero al menos con un string no debería exisitir ese problema y no logro que recuperar el valor de salida (string) de la DLL tampoco...

cHackAll 01-08-2007 22:46:15

Vaya, buscando en la librería... la única función exportada que encontré es:

Código Delphi [-]
 if Assigned(GetProcAddress(LoadLibrary('suma.dll'), '_mexLibrary')) then


MathCad debe trabajar de alguna forma no muy estandar que digamos (ademas que hay que instalar unas docenas de librerías solo para poder hacer la prueba).

Si no es imperativo el uso del MathCad te aconsejo buscar componentes que te hagan las funciónes matemáticas que necesitas en Delphi; además verifica si hay algúna forma mediante OLE de acceder al MathCad.

Sin instalarlo no puedo hacer más amigo, lo lamento (por ahora)

Suerte!

emeceuy 01-08-2007 22:55:02

el tema es que lo que necesito es invertir una matriz de numeros complejos de 500 x 500 !!! no encontré ningun componente en delphi que lo hiciera, y por tanto decidí hacer yo una rutina... el procedimiento demora más de 25 minutos en una muy buena maquina (3.5G de procesador duo y 1G de memoria)... entonces pensé en optimizarlo utilizando matlab que la resuelve rapidamente, pero no puedo hacer funcionar la dll ni con una funcion hiper sencilla !!! además necesitaría hacer funcionar la DLL para otro proyecto que tambien implica matlab :(

cHackAll 01-08-2007 22:58:39

No desesperes, instalo el MathCad y haber que se trae contra nosotros!

emeceuy 01-08-2007 23:02:39

muchas gracias por el animo :rolleyes: por las dudas, rectifico que es MatLAB :D


La franja horaria es GMT +2. Ahora son las 05:07:30.

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