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