E0304 no instance of overloaded function "strstr" matches the argument list
尝试编译时出现此错误,我该如何解决?发布代码,最好先了解图片再了解。 所以这是我得到的错误,我不知道是什么原因导致的,以及如何解决。
int MakeWindows();
int CloseWindows();
int WINAPI WinMain(_In_HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)
{
HW_PROFILE_INFO hwProfileInfo;
const char* cHWID = "{1234-5678-9669-1337}"; //
if (GetCurrentHwProfile(&hwProfileInfo) != NULL) }
printf("Hardware ID: %s\n", hwProfileInfo.szHwProfileGuid);
if (strstr(hwProfileInfo.szHwProfileGuid, cHWID)) {
printf("Your hardware ID was successful\n\n");
Sleep(3069);
system("CLS");
}
else {
printf("Your Hardware ID was denied;\n");
Sleep(1000);
TerminateProcess(GetCurrentProcess(), NULL);
}
}
else {
return 0;
}
};
答案 0 :(得分:1)
strstr
希望char*
作为其第一个参数。 szHwProfileGuid
将是一个宽字符串。您需要wccstr
所以尝试:
const wcchar* cHWID = L"{1234-5678-9669-1337}";
答案 1 :(得分:0)
问题源于您的项目被编译为Unicode(“宽”字符,通常为wchar_t
类型或在Windows中定义为WCHAR
),并且您还使用了单字节字符({{1 }}或char
),例如在您致电strstr
()时。
(正如您在这里看到的那样,这两个合作并不顺利!)
Windows API定义了其许多结构的两个版本(以及相应的使用它们的功能),一个用于容纳每种字符类型。在您的代码示例中,对于API的宽字符版本,CHAR
实际上被定义为HW_PROFILE_INFO
,并且您正在调用HW_PROFILE_INFOW
()。这是好的设计,因为您的构建是作为Unicode构建进行检测的。
有几种方法可以解决此问题;这是一个简单的方法(您的原始代码进行了两个小修改):
GetCurrentHwProfileW
这组简单的更改使您明确使用WINAPI函数的单字节版本,使对strstr
()的调用与其两个参数保持一致。
(我会再次提到,这只是解决此问题的一种方法,“最佳”解决方案可能是主观的。:))