您的位置:首页 > Web前端 > CSS

VS编译错误:“到内置类型的函数样式转换只能接受一个参数”解决方案

2015-02-09 12:17 627 查看
调用DLL中的函数,按着基本的步骤来写的最后编译时,报错“到内置类型的函数样式转换只能接受一个参数”,网上搜了下,也没有看到有用的解决方案。

我的代码是这样的,调用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
}
感觉没啥用,这里只是传参数目不对而已。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐