Matlab - linkando dlls

 
Vista:

linkando dlls

Publicado por Josu (1 intervención) el 15/04/2005 11:49:31
estoy intentando hacer una llamada a una función de una dll desde un programa en C dentro de una S-Function en Simulink pero no lo consigo. he mirado en el Help y pone que al compilar con el comando MEX ponga el nombre del fichero .lib correspondiente a la dll seguido del nombre del fichero .c, pero me aparece el siguiente error:

mex batuketa.c prodll.lib
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

batuketa.obj prodll.lib
Creating library _lib4356.x and object _lib4356.exp
batuketa.obj : error LNK2001: unresolved external symbol _funtzioa
batuketa.dll : fatal error LNK1120: 1 unresolved externals

C:\MATLAB6P5\BIN\WIN32\MEX.PL: Error: Link of 'batuketa.dll' failed.

??? Error using ==> mex
Unable to complete successfully

tengo la dll i el .lib en la misma carpeta que el archivo en C ¿que es lo que estoy haciendo mal?¿hay algo que me falta hacer?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Llamada a función DLL en S-Function

Publicado por Alejandro (145 intervenciones) el 09/10/2023 16:06:52
El error que estás viendo indica que hay un símbolo no resuelto llamado `_funtzioa`. Aquí hay algunas cosas que podrías revisar y ajustar:

1. Nombre del símbolo DLL:
- Asegúrate de que el nombre de la función en la DLL coincide exactamente con el que estás llamando desde tu archivo C. En este caso, el nombre `_funtzioa` debe ser el mismo que el de la función en tu DLL.

2. Convención de enlace:
- Verifica si la función en la DLL utiliza una convención de enlace específica. En Matlab, es común que las funciones DLL utilicen `__declspec(dllexport)` para ser exportadas correctamente.

3. Archivo .LIB:
- El archivo .lib que estás utilizando (`prodll.lib`) debería ser el archivo de importación para tu DLL. Asegúrate de que este archivo .lib se haya generado correctamente y que contiene información sobre los símbolos en la DLL.

4. Ubicación de archivos:
- Confirma que ambos archivos, la DLL y el archivo .lib, están en la misma carpeta que tu archivo C y que Matlab puede acceder a ellos desde la ruta actual.

5. Definiciones de la función en C:
- Asegúrate de que la firma de la función en tu archivo C coincide exactamente con la firma de la función en la DLL.

A modo de ejemplo, si tienes algo como esto en tu archivo C:

1
extern __declspec(dllexport) void funtzioa();

La función en tu DLL debería ser algo así:

1
2
3
4
__declspec(dllexport) void funtzioa()
{
    // implementación de la función
}

Finalmente, cuando uses `mex` para compilar, asegúrate de que la ruta de la DLL y el archivo .lib estén en el camino de búsqueda de bibliotecas de Matlab. Puedes configurar esto usando `addpath` en Matlab.

Espero que esto te ayude a solucionar el problema. ¡Buena suerte, Josu!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar