Синтаксическая ошибка перед строковой константой в большом заголовочном файле C++

Я хочу извлечь видео SDK в формате.hik (Hikvision) в MP4. Мой код следующий:

#include <stdio.h>
#include <stdlib.h>
#include "../SDK/incEn/HCNetSDK.h"
#include "Windows.h"

using namespace std;


int saveRecordFile(int userId, char * srcfile, char * destfile) {
    HINSTANCE hGetProcIDDLL = LoadLibrary("D:\\ExtraccionYConversionArchivos\\c++\\Fuente\\SDK\\HCNetSDK.dll");
    int bRes = 1;
    int hPlayBack = 0;
    if ( (hPlayBack = NET_DVR_GetFileByName(userId, srcfile, destfile)) < 0)
    {
       printf("Error en GetFileByName. Error[$d]\n",NET_DVR_GetLastError());
       bRes = -1;
       return bRes;
    }

    if (!NET_DVR_PlayBackControl(hPlayBack, NET_DVR_PLAYSTART,0,NULL))
    {
       printf("Control de play back fallido [%d]\n", NET_DVR_GetLastError());
       bRes = -1;
       return bRes;
    }
    int nPos = 0;
    for (nPos = 0; nPos < 100 && nPos >= 0; nPos = NET_DVR_GetDownloadPos(hPlayBack))
    {
        Sleep(5000);
    }
    printf("Se obtuvo %d\n", nPos);

    if (!NET_DVR_StopGetFile(hPlayBack))
    {
       printf("Error al detener descarga de archivo [%d]\n",NET_DVR_GetLastError());
       bRes = -1;
       return bRes;
    }
    printf("%s\n",srcfile);

    if (nPos < 0 || nPos > 100)
    {
       printf("Error de descarga [%d]\n", NET_DVR_GetLastError());
       bRes = -1;
       return bRes;
    }
    else
    {
        return 0;
    }
}

int main()
{
    printf("Hello world!\n");
    return 0;
}

Он использует заголовок HCNetSDK.h, который выдает ошибку в несколько строк: синтаксическая ошибка перед строковой константой. Этот заголовочный файл содержит более 41K строк, и большая часть ошибок идет после typedef:

typedef void (CALLBACK *MSGCallBack)(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser); 
NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessageCallBack_V30(MSGCallBack fMessageCallBack, void* pUser);

В чем может быть проблема? До этой строки существует более 6K структур типа typedef:

typedef struct  tagNET_DVR_MATRIX_STATUS_V50
{
    DWORD dwSize;
    BYTE  byMainFrameType;
    BYTE  bySoltNum;
    BYTE  byBoardNum;
    BYTE  byLCDPanelStatus;
    NET_DVR_MATRIX_SUBBOARD_V50 struMatrixSubboard[MAX_MATRIX_SUBBOARD_NUM];
    DWORD dwFanSequence;
    DWORD dwFanConnectStatus;
    DWORD dwFanOperationStatus;
    BYTE  byDeviceModel[32];
    BYTE  byRes[32];
}NET_DVR_MATRIX_STATUS_V50, *LPNET_DVR_MATRIX_STATUS_V50;

И даже что я делаю комментарии к каждой структуре typedef, чтобы поймать ошибку, я не мог понять, как.

1 ответ

Решение

Несколько вещей, чтобы попытаться: Найдите другой файл, который включает этот заголовок. Это компилируется? Какие еще заголовки он использует и какие из них стоят перед этим заголовком в списке?

Можете ли вы скопировать (дублировать и переименовать) этот код в файл C с помощью простой функции hello world? Это может заставить компилятор сказать вам, в какой строке находится реальная проблема.

Вы используете старый компилятор? Раньше у меня возникали проблемы со старой версией Visual Studio - она ​​не соответствовала C99, поэтому не могла скомпилировать определенные типы данных (что не было проблемой для компиляторов GNU). Стандарты Си иногда обновляются, и вам нужно использовать подходящий компилятор (или код в старом стиле!).

Наконец, возможно ли извлечь или преобразовать данные с помощью ffmpeg? Если вы можете сделать это в командной строке, нет необходимости компилировать какой-либо код.

Другие вопросы по тегам