Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-08-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 122
Poder: 21
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
  #2  
Antiguo 01-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
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á
Responder Con Cita
  #3  
Antiguo 01-08-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 122
Poder: 21
emeceuy Va por buen camino
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...
__________________
Marcelo C.
Responder Con Cita
  #4  
Antiguo 01-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
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!
Responder Con Cita
  #5  
Antiguo 01-08-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 122
Poder: 21
emeceuy Va por buen camino
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
__________________
Marcelo C.
Responder Con Cita
  #6  
Antiguo 01-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
No desesperes, instalo el MathCad y haber que se trae contra nosotros!
Responder Con Cita
  #7  
Antiguo 01-08-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 122
Poder: 21
emeceuy Va por buen camino
muchas gracias por el animo por las dudas, rectifico que es MatLAB
__________________
Marcelo C.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo me comunico con Matlab mediante COM felipin007 Providers 2 21-04-2010 07:49:34
Combinar Matlab-Builder Amago C++ Builder 0 10-06-2004 13:03:37


La franja horaria es GMT +2. Ahora son las 12:21:17.


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
Copyright 1996-2007 Club Delphi