您的位置:首页 > 其它

decoding_encoding.c 在VS下调试错误总结

2015-05-10 00:13 260 查看
新建的C++工程

error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

1>          d:\microsoft visual studio 11.0\vc\include\stdio.h(218) : 参见“fopen”的声明

解决:工程属性页|配置属性|C/C++|预处理器|预处理器定义|编辑添加“_CRT_SECURE_NO_WARNINGS”

error C2440: “=”: 无法从“void *”转换为“uint16_t *”

1>          从“void*”到指向非“void”的指针的转换要求显式类型转换

解决:samples = (uint16_t *)av_malloc(buffer_size);

“avcodec_find_encoder”: 不能将参数 1 从“int”转换为“AVCodecID”

1>          转换为枚举类型要求显式转换(static_cast、C 样式转换或函数样式转换)

解决:codec = avcodec_find_encoder((enum AVCodecID)codec_id);

error C2059: 语法错误:“{”

error C2143: 语法错误 : 缺少“;”(在“{”的前面)

error C2143: 语法错误 : 缺少“;”(在“}”的前面)

以上三条指的是c->time_base = (AVRational){1,25};的语法错误,标准C++不支持这种语法。

解决:c->time_base.num = 1; c->time_base.den = 25;

error C3861: “snprintf”: 找不到标识符

解决:snprintf函数并不是标准c/c++中规定的函数,但是在许多编译器中,厂商提供了其实现的版本。

在gcc中,该函数名称就snprintf,而在VC中称为_snprintf。 改成_snprintf就可以了


error C2440: “=”: 无法从“_TCHAR *”转换为“const char *”

1>          与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

解决:output_type = (const char *)argv[1];

特别注意:这里单字节字符编码(C语言是ASCII)和双字节字符编码不匹配,有以下解决方法

法1:项目属性|配置属性|常规|项目默认值|字符集|使用 Unicode 字符集->使用多字节字符集

法2:可以把 int _tmain(int argc, _TCHAR* argv[]) 改为 C 文件中的 int main(int argc, char **argv),统一为单字节字符编码。

法3:const char *output_type; -> const _TCHAR *output_type;

          output_type = argv[1]; -> output_type = (const_TCHAR *)argv[1];

          这样就统一都为双字节的。字符串比较函数用wcscmp()替换strcmp(),这样就可以比较宽字符。



解决:下载的64位的库,平台是默认设置Win32,设置成x64就行了。

值得说明的是,

 \Windows\SysWOW64  文件夹下存放32位的库和应用程序 (WOW64 == Windows on Windows 64 bit );

\Windows\System32  文件夹下存放64位的库和应用程序。不要被名字迷惑了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  FFmpeg