Dziwny problem z zapytaniem IF <c++ builder>

0

witam mam dziwny problem a więc wkleiłem sobie funkcję oto taką :

DWORD GetModuleBase()
{
	MODULEENTRY32 moduleEntry = {0};
	HANDLE snapShot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId());
	DWORD base = 0;

	if(!snapShot)
		return 0;

	moduleEntry.dwSize = sizeof(moduleEntry);
	BOOL currentModule = Module32First(snapShot, &moduleEntry);

	if(currentModule)
	{
		static char hold[1000];
		memcpy(hold, moduleEntry.szModule, strlen(moduleEntry.szModule) + 1);

		if(std::string(hold).find(".exe") == std::string(hold).size() - 4)
			base = (DWORD)moduleEntry.modBaseAddr;
	}

	CloseHandle(snapShot);
	return base;
}

DWORD AlignAddress(DWORD address)
{
	static int base = (int)GetModuleBase();
	static int XPBase = 0x400000;
	address += (base - XPBase);
	return address;
}

i wyskakuje mi error tutaj przy if :

if(std::string(hold).find(".exe") == std::string(hold).size() - 4)

pokazuje mi taki błąd w konsoli : 'string' is not a member of 'std'

0

Dodales plik nagłówkowy?

#include <string>
0

a jednak nie dodałem działa już dzięki.

0
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
const DWORD PlayerExperienceAddr = 0x94FGAC; // exp
int playerExp;
ReadProcessMemory(processHandle, (LPVOID)AlignAddress(PlayerExperienceAddr), &playerExp, 4, NULL);
}

teraz mi wywala tutaj error przy ProcessHandle cos takiego :

undefined symbol 'processHandle'

może ktoś pomóc ?^^ będę wdzięczny

0

Na podstawie powyzszego kawalka kodu to raczej ciezko byloby Ci pomoc. Brakuje Ci zmiennej processHandle, ktora jest zapewne uchwytem do jakiegos procesu z ktorego cos tam trzeba przeczytac. Troche za malo informacji.

0

nie bierz się za programowanie jeżeli robisz kopiuj wklej. Piszę Ci wyraźnie że processHandle nie jest nigdzie zdefiniowany. Zdefiniuj go w tej funkcji

0

to są początki dopiero chciałem coś sprawdzić tylko :) mógłbyś mi pomóc ? oto kod projektu :


#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
#include <tlhelp32.h>
#include <String>


using namespace std;

DWORD GetModuleBase()
{
	MODULEENTRY32 moduleEntry = {0};
	HANDLE snapShot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId());
	DWORD base = 0;

	if(!snapShot)
		return 0;

	moduleEntry.dwSize = sizeof(moduleEntry);
	BOOL currentModule = Module32First(snapShot, &moduleEntry);

	if(currentModule)
	{
		static char hold[1000];
		memcpy(hold, moduleEntry.szModule, strlen(moduleEntry.szModule) + 1);

		if(std::string(hold).find("Game.exe") == std::string(hold).size() - 4)
			base = (DWORD)moduleEntry.modBaseAddr;
	}

	CloseHandle(snapShot);
	return base;
}

DWORD AlignAddress(DWORD address)
{
	static int base = (int)GetModuleBase();
	static int XPBase = 0x400000;
	address += (base - XPBase);
	return address;
}


TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}






void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
const DWORD PlayerExperienceAddr = 0x94CEAC; // login
int playerExp;
ReadProcessMemory(processHandle, (LPVOID)AlignAddress(PlayerExperienceAddr), &playerExp, 4, NULL);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1