Synapsehome Опубликовано 11 декабря, 2011 Поделиться Опубликовано 11 декабря, 2011 Всем привет! Задача такова: не искать каждый раз адрес с жизнями, решил сделать автологгер(используя findpattern), в который должны заноситься новые адреса (к примеру - адреса опыта для кооперативного режима, статичные). Так вот, сам логер работает как присоединяемая к игровому процессу dll. Покажу, как именно я пытаюсь писать (ударение на 2-й слог) в файл:#include <windows.h>#include <fstream>#include <stdio.h>#define LOGFILE "logfile.txt"using namespace std;char logFilePath[260];void getLogFilePath( HINSTANCE hinstDLL ){ if (GetModuleFileNameA(hinstDLL, logFilePath, sizeof(logFilePath))) { for (int i = strlen(logFilePath) - 1; i >= 0; i--) { if (logFilePath[i] == '\\'){ logFilePath[i+1] = 0; strcat(logFilePath,LOGFILE); break; } } }}void add_log(const char *fmt, ...){ va_list va_alist; ofstream ofile; char logbuf[256] = {0}; if(!fmt) { return; } ofile.open(logFilePath, ios::app); va_start (va_alist, fmt); _vsnprintf(logbuf, sizeof(logbuf) - sizeof(char), fmt, va_alist); va_end (va_alist); ofile << logbuf << endl; ofile.close();}void MyLogThread(){ add_log("TEXT");}BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,LPVOID lpReserved ) { switch( fdwReason ) { case DLL_PROCESS_ATTACH: getLogFilePath(hinstDLL); CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)MyLogThread, NULL, NULL, NULL); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; } return TRUE; }В директории с dll лежит файл logfile.txt. Но строчка TETX в файл не записывается Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 11 декабря, 2011 Поделиться Опубликовано 11 декабря, 2011 Почитай мануалы в Интернете о записи данных в файл + обработку исключений, чтобы всегда, как в данном примере так и в других уметь определять ошибку. А также отладку dll-ок в Visual Studio в редакторе кода, если это тебе надо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Synapsehome Опубликовано 11 декабря, 2011 Автор Поделиться Опубликовано 11 декабря, 2011 Почитай мануалы в Интернете о записи данных в файл + обработку исключений, чтобы всегда, как в данном примере так и в других уметь определять ошибку. А также отладку dll-ок в Visual Studio в редакторе кода, если это тебе надо. Не ну конешн спасибо за разъяснение Ошибка была в GetLogFilePath, даже скорее не ошибка не недочёт. я переписал и сделал немного проще. Народ, пользуйте:ofstream LogFile;BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpvReserved){ if(dwReason == DLL_PROCESS_ATTACH) { CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Log, 0, 0, 0); } else if(dwReason == DLL_PROCESS_DETACH) { } return TRUE;}void Log(){LogFile.open("c:\\D3DTest.txt");LogFile.clear();DWORD XP = FindPattern((DWORD)IW5SPbase, 0x005E5000, (BYTE*)"\xA1\x00\x00\x00\x00\x85\xC0\x74\x06\x05", "x????xxxxx");LogFile << "XP Address: " << XP; }XP Address: 1521881249главное, что работает! 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения