VS编译错误:“到内置类型的函数样式转换只能接受一个参数”解决方案
2015-02-09 12:17
627 查看
调用DLL中的函数,按着基本的步骤来写的最后编译时,报错“到内置类型的函数样式转换只能接受一个参数”,网上搜了下,也没有看到有用的解决方案。
我的代码是这样的,调用LZMA的压缩函数,压缩文件:
int nRet = LzmaCompress(pDesData, &nDesLen, pSrcData, nSrcLen, prop, &nPropSize, 9, 1<<24, 3, 0, 2, 32, 2);
这里LzmaCompress只是一个自定义的函数指针类型,并不是实例指针。改成:
int nRet = pLzmaCom(pDesData, &nDesLen, pSrcData, nSrcLen, prop, &nPropSize, 9, 1<<24, 3, 0, 2, 32, 2);
问题解决,竟然这么简单,太大意了。如果你出现这种错误,检查代码,看看调用的是不是函数实例指针而非函数声明。
这种错误在MSDN上的说明是:
我的代码是这样的,调用LZMA的压缩函数,压缩文件:
HMODULE hModule = LoadLibrary(L"LZMA.dll"); if ( NULL == hModule ) { cout<<"没有找到LZMA.dll"<<endl; return 0; } LzmaCompress pLzmaCom = (LzmaCompress)GetProcAddress(hModule, "LzmaCompress"); if ( pLzmaCom ) { FILE* fp = fopen("c:\\1.jpg", "rb"); if ( NULL != fp ) { fseek(fp, 0, SEEK_END); size_t nSrcLen = ftell(fp); fseek(fp, 0, SEEK_SET); byte* pSrcData = (byte*)malloc(nSrcLen); fread(pSrcData, nSrcLen, 1, fp); fclose(fp); size_t nDesLen = nSrcLen; byte* pDesData = (byte*)malloc(nDesLen); byte prop[5] = {0}; size_t nPropSize = 5; int nRet = LzmaCompress(pDesData, &nDesLen, pSrcData, nSrcLen, prop, &nPropSize, \ 9, 1<<24, 3, 0, 2, 32, 2); if ( SZ_ERROR_OUTPUT_EOF == nRet ) {//申请内存不足 free(pDesData); nDesLen += nSrcLen; pDesData = (byte*)malloc(nDesLen); nRet = LzmaCompress(pDesData, &nDesLen, pSrcData, nSrcLen, prop, &nPropSize, \ 9, (1<<24), 3, 0, 2, 32, 2); } if ( SZ_OK == nRet ) {//压缩完成 fp = fopen("c:\\des_7z.dat", "wb+"); if ( NULL != fp ) { fwrite(pDesData, nDesLen, 1, fp); fclose(fp); } } free(pDesData); free(pSrcData); } } FreeLibrary(hModule);没有搜到解决方案就只能排查代码了,报错的代码行是:
int nRet = LzmaCompress(pDesData, &nDesLen, pSrcData, nSrcLen, prop, &nPropSize, 9, 1<<24, 3, 0, 2, 32, 2);
这里LzmaCompress只是一个自定义的函数指针类型,并不是实例指针。改成:
int nRet = pLzmaCom(pDesData, &nDesLen, pSrcData, nSrcLen, prop, &nPropSize, 9, 1<<24, 3, 0, 2, 32, 2);
问题解决,竟然这么简单,太大意了。如果你出现这种错误,检查代码,看看调用的是不是函数实例指针而非函数声明。
这种错误在MSDN上的说明是:
编译器错误 C2564 Visual Studio 2008 其他版本 更新:2007 年 11 月 错误消息 “type”: 到内置类型的函数样式转换只能接受一个参数 内置类型的函数样式类型转换采用单个参数。 下面的示例生成 C2564: // C2564.cpp void g(float f, double d) { int j = int(f, d); // C2564 }感觉没啥用,这里只是传参数目不对而已。
相关文章推荐
- vs2010中的错误错误C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型和Unicode字符集和多字节字符集关系
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- C# 001 --- 正确的删除一个控件的事件函数 --- 解决错误: “A”不包含“B”的定义,并且找不到可接受类型为“A”的第一个参数的扩展方法“B”(是否缺少 using 指令或程序集引用?)
- “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型 之解决方案
- 提示错误(error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型)。
- 提示错误(error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型)。
- findContours函数报错:“将一个无效参数传递给了将无效参数视为严重错误的函数”解决方案之一
- VC++API编译提示“与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换”怎么解决?
- vs2012 函数参数内存对齐引发编译错误
- 函数参数的自动隐式类类型转换只能一次
- 一个VC编译错误引发的对显示类型转换的思考(static_cast、dynamic_cast和const_cast)
- C#调用VC的DLL的接口函数参数类型转换一览表
- C#调用VC DLL接口函数参数类型转换的方法
- 一个在Centos5.5上编译samba时出现错误的解决方案
- MFC:error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型
- 错误类型:ADODB.Recordset (0x800A0BB9)参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
- BCB中Byte[]类型转换成AnsiSring类型数据的一个函数
- C#调用VC DLL接口函数参数类型转换方法介绍
- C#调用VC的DLL的接口函数参数类型转换一览表
- C专家编程-Chapter8 函数中参数类型转换,状态机,散列表