llamada a funciones en DLLs

21/10/2004 - 11:02 por mdjimenez | Informe spam
Hola grupo,

he incluido en mi proyecto una librería de terceros, en concreto
avcodec.dll del proyecto Ffmpeg. Enlazo con ella dinámicamente, ya
sabéis, utilizando LoadLibrary para cargarla y GetProcAddress para
apuntar a los métodos. Todo esto se realiza sin problemas. El problema
ocurre cuando invoco los métodos. Si el método no recibe parámetros
produce el resultado esperado, pero en cuanto llamo a un método que SÍ
recibe parámetros, el proceso de depuración se detiene con el
siguiente mensaje:


Run-Time Check Failure #0 - The value of ESP was not properly saved
across a function call. This is usually a result of calling a
function declared with one calling convention with a function pointer
declared with a different calling convention.


Yo hago las declaración siguiente...

typedef AVCodec * (FAR WINAPI *PROC_FIND_DECODER)(enum CodecID);

...

PROC_FIND_DECODER procFindDecoder;
AVCodec *pCodec;
HMODULE hAvcodecDll;

hAvcodecDll =
procFindDecoder = (PROC_FIND_DECODER) GetProcAddress(
hAvcodecDll, "avcodec_find_decoder");

pCodec = (procFindDecoder)(CODEC_ID_MPEG4);

Y en esta línea es donde falla.

¿Por qué falla sólo si la función recibe parámetros? ¿Debería usar
algo diferente a FAR WINAPI?

Estoy usando Visual Studio .Net, pero la librería la he compilado con
MinGW.

Gracias a todos y un saludo,

Manuel.
 

Leer las respuestas

#1 Rodrigo Corral [MVP]
21/10/2004 - 12:16 | Informe spam
Típico error de convención de llamada. Asegurate que estas usando la
convencion de llamada adecuada.


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org

Preguntas similares