Ver Mensaje Individual
  #1  
Antiguo 01-08-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 122
Reputación: 22
emeceuy Va por buen camino
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 !!!

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
__________________
Marcelo C.

Última edición por emeceuy fecha: 01-08-2007 a las 07:09:11.
Responder Con Cita