大头文件c ++中字符串常量之前的语法错误

时间:2018-02-17 17:14:26

标签: c hikvision

我想将víaSDK格式的视频格式.hik(海康威视)提取到MP4。我的代码是下一个:

 $data['initial_data'] = $this->product_model->get_product_data($query);
                $data['material_list'] = $this->product_model->get_material();
                $m_list = $this->product_model->get_material();
                if($m_list->num_rows() > 0)
                {
                    foreach($m_list->result() as $m){
                        $data['unit_list'] = $this->product_model->get_material_item_unit($m->unit_id);
                    }
                }

它使用HCNetSDK.h标头,这会在多行中引发错误:字符串常量之前的语法错误。此标头文件超过41K行,并且大多数错误发生在typedef之后:

#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;
}

可能是什么问题?在此之前,有超过6K类型的结构,如下所示:

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);

即使我对每个typedef结构进行注释以捕获错误,我也无法弄清楚如何。

1 个答案:

答案 0 :(得分:1)

要尝试的一些事项: 查找包含此标头的另一个文件。它编译?它使用了哪些其他标题以及哪些标题位于列表中的标题之前?

您可以使用简单的hello world主函数将此代码复制(复制并重命名)到C文件中吗?它可能会强制编译器告诉您实际问题在哪一行。

您使用的是旧编译器吗?我曾经遇到过旧版Visual Studio的问题 - 它不是最新的C99所以它无法编译某些数据类型(这对GNU编译器没有问题)。 C标准有时会更新,您需要使用合适的编译器(或旧样式的代码!)。

最后,是否可以使用ffmpeg提取或转换数据?如果您可以在命令行上执行此操作,则无需编译任何代码。