Нужна помощь в исправлении нарушений прав доступа с помощью FFmpeg DLL

Я пытаюсь использовать DLL FFmpeg с помощью Visual Studio 2012, и я получаю нарушение прав доступа во время выполнения, когда я звоню avcodec_find_encoder, Вот код:

// TestFFmpeg.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
extern "C" {
#include "libavcodec\avcodec.h"#include "libavformat\avformat.h"}

#define INBUF_SIZE 4096

int _tmain(int argc, _TCHAR* argv[])
{
AVCodec *codec;

const char *videoFilename = "C:\\Users\\Public\\Videos\\Sample Videos\\Wildlife.wmv";

av_register_all(); // This works; however, no parameters or return values.

codec = avcodec_find_encoder(CODEC_ID_WMV3);  // Run time Access Violation HERE
if (!codec) {
fprintf(stderr, "Codec not found\n");
exit(1);
}

return 0;
}

Вот сообщение об ошибке:

Необработанное исключение в 0x75C18B60 (msvcrt.dll) в TestFFmpeg.exe: 0xC0000005: расположение чтения нарушения доступа 0x00000049.

Трассировка стека:

    msvcrt.dll!_strcmp()    Unknown
avcodec-54.dll!6a56caac()   Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for avcodec-54.dll]
>   TestFFmpeg.exe!wmain(int argc, wchar_t * * argv) Line 23    C++
TestFFmpeg.exe!__tmainCRTStartup() Line 533 C
TestFFmpeg.exe!wmainCRTStartup() Line 377   C
kernel32.dll!@BaseThreadInitThunk@12()  Unknown
ntdll.dll!___RtlUserThreadStart@8() Unknown
ntdll.dll!__RtlUserThreadStart@8()  Unknown

Я предполагаю, что есть проблема с возвратом codec указатель, но я новичок в C ++ и понятия не имею, как это исправить. Я попробовал соглашения о вызовах cdecl, stdcall и fastcall — ни одна из них не исправила проблему. Я использую последнюю 32-битную DLL от Zeranoe. Какие-либо предложения?

РЕДАКТИРОВАТЬ:
Я вызвал другие функции в DLL, и они работают. Например, avformat_open_input работает правильно. Я могу передать параметры, и функция возвращает успешное возвращаемое значение (0) и заполняет структуру контекста формата. av_find_stream_info работает так же. Я до сих пор не могу понять, почему avcodec_find_decoder создает нарушение доступа.

3

Решение

Наконец-то исправили. Я сделал два шага, и я не уверен, какой из них работал (хе):

  1. Добавлены файлы .lib в качестве входных зависимостей компоновщика
  2. Я взял сборку 7 сентября и убедился, что у меня одинаковая дата сборки для библиотек DLL, библиотек и включаемых файлов.

Кажется, теперь все работает нормально.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru