类型“const char *”的ARG与“LPSRT”C++类型的参数不兼容

类型“const char *”的ARG与“LPSRT”C++类型的参数不兼容,c++,visual-studio,compilation,C++,Visual Studio,Compilation,嘿,伙计们,我很抱歉问这个问题,但我还没有在网上找到我的答案。因此,在编译我的一个项目时,我不断得到const char*类型的错误arg与LPSTR类型的参数不兼容。然而,当我把它发送给我的朋友时,他能编译的所有代码都是一样的,都是在windows 10上使用visual studio 2017编写的。这是源代码 void RunProcess() { runSetDebugPrivs(); while (!FindProcessName("csgo.exe", &am

嘿,伙计们,我很抱歉问这个问题,但我还没有在网上找到我的答案。因此,在编译我的一个项目时,我不断得到const char*类型的错误arg与LPSTR类型的参数不兼容。然而,当我把它发送给我的朋友时,他能编译的所有代码都是一样的,都是在windows 10上使用visual studio 2017编写的。这是源代码

    void RunProcess()
{
    runSetDebugPrivs();
    while (!FindProcessName("csgo.exe", &__gameProcess)) Sleep(12);
    while (!(getThreadByProcess(__gameProcess.th32ProcessID))) Sleep(12);
    __HandleProcess = OpenProcess(PROCESS_ALL_ACCESS, false, __gameProcess.th32ProcessID);
    while (__dwordClient == 0x0) __dwordClient = GetModuleNamePointer("client.dll", __gameProcess.th32ProcessID);
    while (__dwordEngine == 0x0) __dwordEngine = GetModuleNamePointer("engine.dll", __gameProcess.th32ProcessID);
    while (__dwordVGui == 0x0) __dwordVGui = GetModuleNamePointer("vguimatsurface.dll", __gameProcess.th32ProcessID);
    __HWNDCss = FindWindow(NULL, "Counter-Strike: Global Offensive");
}

})

我认为问题在于getModuleNamePainter函数的第一个参数需要非常量char*string,但在调用该函数时,您将常量char*literal放在了那里。文字常量始终为常量char*。造成这种情况的原因可能是C语言的其他风格在这种情况下无法区分这些语言。一种可能的修复方法是将该函数的声明更改为在第一个参数中接受LPCSTR a.k.a.const char*,而不是LPSTR a.k.a.char*

您没有显示GetModuleNamePainter函数,所以我只能猜测。如果这是我在黑客论坛上发现的,那么声明如下:

DWORD GetModuleNamePointer(LPSTR LPSTRModuleName, DWORD __DwordProcessId);
但是它可以安全地与const一起工作,所以您只需将其更改为

DWORD GetModuleNamePointer(LPCSTR LPSTRModuleName, DWORD __DwordProcessId);
声明更改后,它将与编译器兼容

正如@StoryTeller在注释中指出的,您还可以在编译器中禁用标准一致性。以下是它的作用和帮助您的原因:


简言之:当你的LPSTR程序不能工作时,正确的行为可能是令人惊讶的。它适用于较旧的编译器,而新的编译器则更严格地遵循标准-

答案取自。转到Project Properties->C\C++->Language,确保一致性模式设置为NO

我敢打赌您使用的是MSVC 15.5或更高版本,而您的朋友没有。错误在以下情况下出现:当uu dwordClient==0x0 u dwordClient=getModuleNamePointClient.dll、u gameProcess.th32ProcessID;而uuudwordengine==0x0 uuudwordengine=getModuleNamePointInterengine.dll,uuuuGameProcess.th32ProcessID;而uuu dwordVGui==0x0 uuuu dwordVGui=GetModuleNamePointervguimatsurface.dll,uuu gameProcess.th32ProcessID;所以7 8和9to到您的项目选项,找到符合模式选择的C/C++语言,并将其改为NO。如果你认真学习C++,你应该得到一个,并确保选项是对你的未来项目。非常感谢,我有一些电子书IM工作的