error: invalid conversion from 'DWORD {aka long unsigned int}' to 'PDWORD {aka long unsigned int*}' [-fpermissive]| how to fix?
error: invalid conversion from 'DWORD {aka long unsigned int}' to 'PDWORD {aka long unsigned int*}' [-fpermissive]| how to fix?
我是 C++ 的新手,我正在做一个训练师(植物大战僵尸)我之前尝试为那个游戏做一个训练师但是失败了内存写入不起作用所以我尝试了另一种方法但是用这个方法它给了我几个错误:
54|error: invalid conversion from 'DWORD {aka long unsigned int}' to 'PDWORD
{aka long unsigned int*}' [-fpermissive]|
1780|error: initializing argument 2 of >'DWORDGetWindowThreadProcessId(HWND,PDWORD)' [-fpermissive]|
就是看不懂,更奇怪的是这三个:
62|error: expected '}' before 'else'|
70|error: 'else' without a previous 'if'|
76|error: 'else' without a previous 'if'|
我知道那些是什么意思,但在 else 之前显然有一个 }。在 else
之前有 if 语句
代码如下:
/*
Plants vs Zombies Game of the year edition trainer
*/
#include <iostream>
#include <Windows.h>
#include <string>
#include <ctime>
DWORD FindDmaAddy(int PointerLevel, HANDLE hProcHandle, DWORD Offsets[],DWORD BaseAddress);
void WriteToMemory(HANDLE hProcHandle);
std::string GameName = "PlantsVsZombies";
LPCSTR LGameWindow = "Plants vs. Zombies";
std::string GameStatus;
bool IsGameAvail;
bool UpdateOnNextRun;
//Zon var.
bool SunStatus;
BYTE SunValue[] = {0xA3, 0X1C, 0X0, 0X0};
DWORD SunBaseAddress = {0x025A9E00};
DWORD SunOffsets[] = {0x5560, 0x768, 0x0};
//Geld var.
bool MoneyStatus;
BYTE MoneyValue[] = {0xA3, 0X1C, 0X0, 0X0};
DWORD MoneyBaseAddress = {0x02589E00};
DWORD MoneyOffsets[] = {0x28, 0x82C, 0x0};
int main()
{
HWND hGameWindow = NULL;
int timeSinceLastUpdate = clock();
int GameAvailTMR = clock();
int OnePressTMR = clock();
DWORD dwProcID = NULL;
HANDLE hProcHandle = NULL;
UpdateOnNextRun = true;
std::string sSunStatus = "UIT";
std::string sMoneyStatus = "UIT";
while(!GetAsyncKeyState(VK_NUMPAD0));
{
if(clock() - GameAvailTMR > 100);
{
GameAvailTMR = clock();
IsGameAvail = false;
hGameWindow = FindWindow(NULL, LGameWindow);
if(hGameWindow)
{
GetWindowThreadProcessId( hGameWindow, dwProcID);
if(dwProcID != 0)
{
hProcHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcID);
if(hProcHandle == INVALID_HANDLE_VALUE || hProcHandle == NULL);
{
GameStatus = "Plants vs. Zombies.exe kon niet worden geopend";
}
else
{
GameStatus = "Plants vs. Zombies.exe is geopend en klaar om gehackt te worden";
IsGameAvail = true;
system("color 0A");
}
}
}
else
{
GameStatus = "Kon het process ID niet vinden";
system("color 0C");
}
}
else
{
GameStatus = "Plants vs. Zombies is niet gevonden";
system("color 0C");
}
if(UpdateOnNextRun || clock() - timeSinceLastUpdate > 5000)
{
system("cls");
std::cout << "---------------------------------------------------------------------------" << std::endl;
std::cout << " Plants vs Zombies Trainer" << std::endl;
std::cout << "---------------------------------------------------------------------------" << std::endl << std::endl;
std::cout << "Game Status: " << GameStatus << std::endl << std::endl;
std::cout <<"[NUMPAD1] Oneindig Zon: " << sSunStatus << std::endl;
std::cout <<"[NUMPAD2] Oneindig Geld: " << sMoneyStatus << std::endl;
std::cout <<"[NUMPAD0] Sluit de trainer";
}
if(IsGameAvail)
{
if(GetAsyncKeyState(VK_NUMPAD1))
{
OnePressTMR = clock();
SunStatus = !SunStatus;
UpdateOnNextRun = true;
if(SunStatus)sSunStatus = "ON";
else sSunStatus = "OFF";
}
else if(GetAsyncKeyState(VK_NUMPAD2))
{
OnePressTMR = clock();
MoneyStatus = !MoneyStatus;
UpdateOnNextRun = true;
if(MoneyStatus)sMoneyStatus = "ON";
else sMoneyStatus = "OFF";
}
}
if(clock() - OnePressTMR > 400)
{
if(IsGameAvail)
{
//Zon
if(GetAsyncKeyState(VK_NUMPAD1))
{
OnePressTMR = clock ();
SunStatus = !SunStatus;
UpdateOnNextRun = true;
if(SunStatus)sSunStatus = "AAN";
else sSunStatus = "UIT";
}
//Geld
else if(GetAsyncKeyState(VK_NUMPAD2))
{
OnePressTMR = clock ();
MoneyStatus = !MoneyStatus;
UpdateOnNextRun = true;
if(MoneyStatus)sMoneyStatus = "AAN";
else sMoneyStatus = "UIT";
}
}
}
CloseHandle(hProcHandle);
CloseHandle(hGameWindow);
return ERROR_SUCCESS;
}
DWORD FindDmaAddy(int PointerLevel, HANDLE hProcHandle, DWORD Offsets[], DWORD BaseAddress)
{
DWORD pointer = BaseAddress;
DWORD pTemp;
DWORD pointerAddr;
for(int i = 0; i <PointerLevel; i++)
{
if(i == 0)
{
ReadProcessMemory(hProcHandle, (LPCVOID)pointer, &pTemp, sizeof(pTemp), NULL);
}
pointerAddr = pTemp + Offsets[i];
ReadProcessMemory(hProcHandle, (LPCVOID)pointerAddr, &pTemp, sizeof(pTemp), NULL);
}
}
void WriteToMemory(HANDLE hProcHandle)
{
DWORD AddressToWrite;
if(SunStatus)
{
AddressToWrite = FindDmaAddy(2, hProcHandle, SunOffsets, SunBaseAddress);
WriteProcessMemory(hProcHandle,(BYTE*)AddressToWrite, &SunValue, sizeof(SunValue), NULL);
}
if(MoneyStatus)
{
AddressToWrite = FindDmaAddy(2, hProcHandle, MoneyOffsets, MoneyBaseAddress);
WriteProcessMemory(hProcHandle,(BYTE*)AddressToWrite, &MoneyValue, sizeof(MoneyValue), NULL);
}
}
提前致谢
编译器的消息通常是正确的,您还应该阅读它的警告。你的代码实际上充满了愚蠢的小错误。
if(clock() - GameAvailTMR > 100);
结尾;
在这里关闭了if
所以else就不会附加到它
GetWindowThreadProcessId( hGameWindow, dwProcID);
当函数签名需要LPDWORD时,dwProcID是DWORD,即DWORD *。直接写 GetWindowThreadProcessId( hGameWindow, &dwProcID);
别忘了,当你在一行中看到错误时,请同时阅读上面的内容。只需修复所有错误和警告,如果仍有问题请返回此处
我是 C++ 的新手,我正在做一个训练师(植物大战僵尸)我之前尝试为那个游戏做一个训练师但是失败了内存写入不起作用所以我尝试了另一种方法但是用这个方法它给了我几个错误:
54|error: invalid conversion from 'DWORD {aka long unsigned int}' to 'PDWORD
{aka long unsigned int*}' [-fpermissive]|1780|error: initializing argument 2 of >'DWORDGetWindowThreadProcessId(HWND,PDWORD)' [-fpermissive]|
就是看不懂,更奇怪的是这三个:
62|error: expected '}' before 'else'|
70|error: 'else' without a previous 'if'|
76|error: 'else' without a previous 'if'|
我知道那些是什么意思,但在 else 之前显然有一个 }。在 else
之前有 if 语句代码如下:
/*
Plants vs Zombies Game of the year edition trainer
*/
#include <iostream>
#include <Windows.h>
#include <string>
#include <ctime>
DWORD FindDmaAddy(int PointerLevel, HANDLE hProcHandle, DWORD Offsets[],DWORD BaseAddress);
void WriteToMemory(HANDLE hProcHandle);
std::string GameName = "PlantsVsZombies";
LPCSTR LGameWindow = "Plants vs. Zombies";
std::string GameStatus;
bool IsGameAvail;
bool UpdateOnNextRun;
//Zon var.
bool SunStatus;
BYTE SunValue[] = {0xA3, 0X1C, 0X0, 0X0};
DWORD SunBaseAddress = {0x025A9E00};
DWORD SunOffsets[] = {0x5560, 0x768, 0x0};
//Geld var.
bool MoneyStatus;
BYTE MoneyValue[] = {0xA3, 0X1C, 0X0, 0X0};
DWORD MoneyBaseAddress = {0x02589E00};
DWORD MoneyOffsets[] = {0x28, 0x82C, 0x0};
int main()
{
HWND hGameWindow = NULL;
int timeSinceLastUpdate = clock();
int GameAvailTMR = clock();
int OnePressTMR = clock();
DWORD dwProcID = NULL;
HANDLE hProcHandle = NULL;
UpdateOnNextRun = true;
std::string sSunStatus = "UIT";
std::string sMoneyStatus = "UIT";
while(!GetAsyncKeyState(VK_NUMPAD0));
{
if(clock() - GameAvailTMR > 100);
{
GameAvailTMR = clock();
IsGameAvail = false;
hGameWindow = FindWindow(NULL, LGameWindow);
if(hGameWindow)
{
GetWindowThreadProcessId( hGameWindow, dwProcID);
if(dwProcID != 0)
{
hProcHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcID);
if(hProcHandle == INVALID_HANDLE_VALUE || hProcHandle == NULL);
{
GameStatus = "Plants vs. Zombies.exe kon niet worden geopend";
}
else
{
GameStatus = "Plants vs. Zombies.exe is geopend en klaar om gehackt te worden";
IsGameAvail = true;
system("color 0A");
}
}
}
else
{
GameStatus = "Kon het process ID niet vinden";
system("color 0C");
}
}
else
{
GameStatus = "Plants vs. Zombies is niet gevonden";
system("color 0C");
}
if(UpdateOnNextRun || clock() - timeSinceLastUpdate > 5000)
{
system("cls");
std::cout << "---------------------------------------------------------------------------" << std::endl;
std::cout << " Plants vs Zombies Trainer" << std::endl;
std::cout << "---------------------------------------------------------------------------" << std::endl << std::endl;
std::cout << "Game Status: " << GameStatus << std::endl << std::endl;
std::cout <<"[NUMPAD1] Oneindig Zon: " << sSunStatus << std::endl;
std::cout <<"[NUMPAD2] Oneindig Geld: " << sMoneyStatus << std::endl;
std::cout <<"[NUMPAD0] Sluit de trainer";
}
if(IsGameAvail)
{
if(GetAsyncKeyState(VK_NUMPAD1))
{
OnePressTMR = clock();
SunStatus = !SunStatus;
UpdateOnNextRun = true;
if(SunStatus)sSunStatus = "ON";
else sSunStatus = "OFF";
}
else if(GetAsyncKeyState(VK_NUMPAD2))
{
OnePressTMR = clock();
MoneyStatus = !MoneyStatus;
UpdateOnNextRun = true;
if(MoneyStatus)sMoneyStatus = "ON";
else sMoneyStatus = "OFF";
}
}
if(clock() - OnePressTMR > 400)
{
if(IsGameAvail)
{
//Zon
if(GetAsyncKeyState(VK_NUMPAD1))
{
OnePressTMR = clock ();
SunStatus = !SunStatus;
UpdateOnNextRun = true;
if(SunStatus)sSunStatus = "AAN";
else sSunStatus = "UIT";
}
//Geld
else if(GetAsyncKeyState(VK_NUMPAD2))
{
OnePressTMR = clock ();
MoneyStatus = !MoneyStatus;
UpdateOnNextRun = true;
if(MoneyStatus)sMoneyStatus = "AAN";
else sMoneyStatus = "UIT";
}
}
}
CloseHandle(hProcHandle);
CloseHandle(hGameWindow);
return ERROR_SUCCESS;
}
DWORD FindDmaAddy(int PointerLevel, HANDLE hProcHandle, DWORD Offsets[], DWORD BaseAddress)
{
DWORD pointer = BaseAddress;
DWORD pTemp;
DWORD pointerAddr;
for(int i = 0; i <PointerLevel; i++)
{
if(i == 0)
{
ReadProcessMemory(hProcHandle, (LPCVOID)pointer, &pTemp, sizeof(pTemp), NULL);
}
pointerAddr = pTemp + Offsets[i];
ReadProcessMemory(hProcHandle, (LPCVOID)pointerAddr, &pTemp, sizeof(pTemp), NULL);
}
}
void WriteToMemory(HANDLE hProcHandle)
{
DWORD AddressToWrite;
if(SunStatus)
{
AddressToWrite = FindDmaAddy(2, hProcHandle, SunOffsets, SunBaseAddress);
WriteProcessMemory(hProcHandle,(BYTE*)AddressToWrite, &SunValue, sizeof(SunValue), NULL);
}
if(MoneyStatus)
{
AddressToWrite = FindDmaAddy(2, hProcHandle, MoneyOffsets, MoneyBaseAddress);
WriteProcessMemory(hProcHandle,(BYTE*)AddressToWrite, &MoneyValue, sizeof(MoneyValue), NULL);
}
}
提前致谢
编译器的消息通常是正确的,您还应该阅读它的警告。你的代码实际上充满了愚蠢的小错误。
if(clock() - GameAvailTMR > 100);
结尾;
在这里关闭了if
所以else就不会附加到它
GetWindowThreadProcessId( hGameWindow, dwProcID);
当函数签名需要LPDWORD时,dwProcID是DWORD,即DWORD *。直接写 GetWindowThreadProcessId( hGameWindow, &dwProcID);
别忘了,当你在一行中看到错误时,请同时阅读上面的内容。只需修复所有错误和警告,如果仍有问题请返回此处