![](/img/trans.png)
[英]C++ Argument of type “char” is incompatible with parameter of type “const char”
[英]arg of type “const char *” is incompatible with parameter of type “LPSTR” c++
嘿伙計們,我很抱歉問這個問題,但我還沒有在網上找到我的答案。 因此,在編譯我的項目之一時,我不斷收到錯誤“類型為“const char *”的參數與類型為“LPSTR”的參數不兼容。 當我將它發送給我的朋友相同的代碼時,他可以使用 Visual Studio 2017 在 Windows 10 上編譯它的所有內容。這是源代碼
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");
}
};
我認為問題在於GetModuleNamePointer
函數的第一個參數需要非常量char*
字符串,但是在調用該函數時將const char*
文字放在那里。 文字常量始終是const char*
。 造成這種情況的原因可能是其他風格的 C 語言在這種情況下無法區分這些。 一個可能的解決方法是更改該函數的聲明以在第一個參數中接受LPCSTR
(又名const char*
)而不是LPSTR
(又名char*
)。
你沒有顯示GetModuleNamePointer
函數,所以我只能猜測。 如果這是我在 hack 論壇上找到的內容,則聲明如下:
DWORD GetModuleNamePointer(LPSTR LPSTRModuleName, DWORD __DwordProcessId);
但是它可以安全地與 const 一起使用,因此您可以簡單地將其更改為
DWORD GetModuleNamePointer(LPCSTR LPSTRModuleName, DWORD __DwordProcessId);
在聲明中進行此更改后,它將與您的編譯器兼容。
正如@StoryTeller 在評論中已經指出的那樣,您還可以禁用編譯器中的標准一致性。 以下是它的作用以及為什么對您有幫助的描述: https : //docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance
簡而言之:當您的 LPSTR 程序不起作用時,正確的行為可能會令人驚訝。 它適用於舊的編譯器,而新的編譯器更嚴格地遵循標准。 :-)
來自這個論壇條目的答案。 轉到項目“Properties -> C\\C++ -> Language”並確保“Conformance mode”設置為“NO”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.