错误C2664:'errno_t wcstombs_s(size_t *,char *,size_t,const wchar_t *,size_t)':无法将参数4从'CHAR [260]'转换为'const wchar_t *'1>指向的类型不相关;转换需要reinterpret_cast,C风格的转换或函数式转换
这个错误是什么意思?
我的职责是:
BOOL DependentDLLDisplay()
{
char arr[200];
if(!Module32First(hProcessSnap,&me32))
{
cout<<" ERROR : Failed to Get DLL Information"<<endl;
CloseHandle(hProcessSnap);
return FALSE;
}
cout<<endl<<"DEPENDENT DLL OF THIS PROCESS :"<<endl;
do
{
wcstombs_s(NULL,arr,200,me32.szModule,200);
cout<<arr<<endl;
}while(Module32Next(hProcessSnap,&me32));
CloseHandle(hProcessSnap);
return TRUE;
}
1 回答
您的对象
me32
的类型为MODULEENTRY32
,如下所示:https://msdn.microsoft.com/en-us/library/windows/desktop/ms684225.aspx
作为第4个参数传递给'wcstombs_s
的
szModule` 字段定义为:在Windows API中,
TCHAR
在MBCS编码中定义为char
,在UNICODE编码中定义为wchar
.您看到的错误表明您正在包含Windows库的MBCS版本,因此
MODULEENTRY32
实际上是MODULEENTRY32A
并且me32.szModule
是char[]
,但是当它实际上是me32.szModule
时就像它是一个宽wchar_t[]
字符串一样一个Ansichar[]
字符串 .您可以通过更改项目设置或使用普通的
char
字符串副本切换到UNICODE库,以获取该字段的值 .或者,正如雷米所说:
最后一点:您应该将局部变量扩展为
szModule
的相同大小,而不是可能截断内容 .