[Project64] move program inir/cleanup code in to a separate file
This commit is contained in:
parent
b8ade27bab
commit
9e9189c192
|
@ -0,0 +1,139 @@
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include <Common\Util.h>
|
||||||
|
|
||||||
|
void FixDirectories(void);
|
||||||
|
void FixLocale(void);
|
||||||
|
|
||||||
|
static void IncreaseThreadPriority(void);
|
||||||
|
|
||||||
|
static CTraceFileLog * g_LogFile = NULL;
|
||||||
|
|
||||||
|
void LogLevelChanged(CTraceFileLog * LogFile)
|
||||||
|
{
|
||||||
|
LogFile->SetTraceLevel((TraceLevel)g_Settings->LoadDword(Debugger_AppLogLevel));
|
||||||
|
}
|
||||||
|
|
||||||
|
void LogFlushChanged(CTraceFileLog * LogFile)
|
||||||
|
{
|
||||||
|
LogFile->SetFlushFile(g_Settings->LoadDword(Debugger_AppLogFlush) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitializeLog(void)
|
||||||
|
{
|
||||||
|
CPath LogFilePath(CPath::MODULE_DIRECTORY);
|
||||||
|
LogFilePath.AppendDirectory("Logs");
|
||||||
|
if (!LogFilePath.DirectoryExists())
|
||||||
|
{
|
||||||
|
LogFilePath.DirectoryCreate();
|
||||||
|
}
|
||||||
|
LogFilePath.SetNameExtension("Project64.log");
|
||||||
|
|
||||||
|
g_LogFile = new CTraceFileLog(LogFilePath, g_Settings->LoadDword(Debugger_AppLogFlush) != 0, Log_New, 500);
|
||||||
|
#ifdef VALIDATE_DEBUG
|
||||||
|
g_LogFile->SetTraceLevel((TraceLevel)(g_Settings->LoadDword(Debugger_AppLogLevel) | TraceValidate | TraceDebug));
|
||||||
|
#else
|
||||||
|
g_LogFile->SetTraceLevel((TraceLevel)g_Settings->LoadDword(Debugger_AppLogLevel));
|
||||||
|
#endif
|
||||||
|
AddTraceModule(g_LogFile);
|
||||||
|
|
||||||
|
g_Settings->RegisterChangeCB(Debugger_AppLogLevel, g_LogFile, (CSettings::SettingChangedFunc)LogLevelChanged);
|
||||||
|
g_Settings->RegisterChangeCB(Debugger_AppLogFlush, g_LogFile, (CSettings::SettingChangedFunc)LogFlushChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppInit(CNotification * Notify)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
g_Notify = Notify;
|
||||||
|
|
||||||
|
FixDirectories();
|
||||||
|
FixLocale();
|
||||||
|
|
||||||
|
stdstr_f AppName("Project64 %s", VER_FILE_VERSION_STR);
|
||||||
|
IncreaseThreadPriority();
|
||||||
|
|
||||||
|
g_Settings = new CSettings;
|
||||||
|
g_Settings->Initialize(AppName.c_str());
|
||||||
|
|
||||||
|
if (g_Settings->LoadBool(Setting_CheckEmuRunning) &&
|
||||||
|
pjutil::TerminatedExistingExe())
|
||||||
|
{
|
||||||
|
delete g_Settings;
|
||||||
|
g_Settings = new CSettings;
|
||||||
|
g_Settings->Initialize(AppName.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
InitializeLog();
|
||||||
|
|
||||||
|
WriteTrace(TraceDebug, __FUNCTION__ ": Application Starting");
|
||||||
|
CMipsMemoryVM::ReserveMemory();
|
||||||
|
|
||||||
|
//Create the plugin container
|
||||||
|
WriteTrace(TraceDebug, __FUNCTION__ ": Create Plugins");
|
||||||
|
g_Plugins = new CPlugins(g_Settings->LoadStringVal(Directory_Plugin));
|
||||||
|
|
||||||
|
g_Lang = new CLanguage();
|
||||||
|
g_Lang->LoadCurrentStrings();
|
||||||
|
g_Notify->AppInitDone();
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
g_Notify->DisplayError(stdstr_f("Exception caught\nFile: %s\nLine: %d", __FILE__, __LINE__).ToUTF16().c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppCleanup(void)
|
||||||
|
{
|
||||||
|
g_Settings->UnregisterChangeCB(Debugger_AppLogLevel, g_LogFile, (CSettings::SettingChangedFunc)LogLevelChanged);
|
||||||
|
g_Settings->UnregisterChangeCB(Debugger_AppLogFlush, g_LogFile, (CSettings::SettingChangedFunc)LogFlushChanged);
|
||||||
|
WriteTrace(TraceDebug, __FUNCTION__ ": cleaning up global objects");
|
||||||
|
|
||||||
|
if (g_Rom) { delete g_Rom; g_Rom = NULL; }
|
||||||
|
if (g_Plugins) { delete g_Plugins; g_Plugins = NULL; }
|
||||||
|
if (g_Settings) { delete g_Settings; g_Settings = NULL; }
|
||||||
|
if (g_Lang) { delete g_Lang; g_Lang = NULL; }
|
||||||
|
|
||||||
|
CMipsMemoryVM::FreeReservedMemory();
|
||||||
|
|
||||||
|
WriteTrace(TraceDebug, __FUNCTION__ ": Done");
|
||||||
|
CloseTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FixDirectories(void)
|
||||||
|
{
|
||||||
|
CPath Directory(CPath::MODULE_DIRECTORY);
|
||||||
|
Directory.AppendDirectory("Config");
|
||||||
|
if (!Directory.DirectoryExists()) Directory.DirectoryCreate();
|
||||||
|
|
||||||
|
Directory.UpDirectory();
|
||||||
|
Directory.AppendDirectory("Logs");
|
||||||
|
if (!Directory.DirectoryExists()) Directory.DirectoryCreate();
|
||||||
|
|
||||||
|
Directory.UpDirectory();
|
||||||
|
Directory.AppendDirectory("Save");
|
||||||
|
if (!Directory.DirectoryExists()) Directory.DirectoryCreate();
|
||||||
|
|
||||||
|
Directory.UpDirectory();
|
||||||
|
Directory.AppendDirectory("Screenshots");
|
||||||
|
if (!Directory.DirectoryExists()) Directory.DirectoryCreate();
|
||||||
|
|
||||||
|
Directory.UpDirectory();
|
||||||
|
Directory.AppendDirectory("textures");
|
||||||
|
if (!Directory.DirectoryExists()) Directory.DirectoryCreate();
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
void FixLocale(void)
|
||||||
|
{
|
||||||
|
char *lbuffer = new char[10];
|
||||||
|
if (GetLocaleInfoA(LOCALE_SYSTEM_DEFAULT, LOCALE_SABBREVLANGNAME, lbuffer, 10))
|
||||||
|
{
|
||||||
|
setlocale(LC_ALL, lbuffer);
|
||||||
|
}
|
||||||
|
delete[] lbuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IncreaseThreadPriority(void)
|
||||||
|
{
|
||||||
|
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL);
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Project64\User Interface\Notification Class.h>
|
||||||
|
|
||||||
|
void AppInit(CNotification * Notify);
|
||||||
|
void AppCleanup(void);
|
|
@ -44,6 +44,7 @@
|
||||||
</Manifest>
|
</Manifest>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClCompile Include="AppInit.cpp" />
|
||||||
<ClCompile Include="logging.cpp" />
|
<ClCompile Include="logging.cpp" />
|
||||||
<ClCompile Include="main.cpp" />
|
<ClCompile Include="main.cpp" />
|
||||||
<ClCompile Include="Multilanguage\LanguageSelector.cpp" />
|
<ClCompile Include="Multilanguage\LanguageSelector.cpp" />
|
||||||
|
@ -178,6 +179,7 @@
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClInclude Include="AppInit.h" />
|
||||||
<ClInclude Include="Logging.h" />
|
<ClInclude Include="Logging.h" />
|
||||||
<ClInclude Include="Multilanguage.h" />
|
<ClInclude Include="Multilanguage.h" />
|
||||||
<ClInclude Include="Multilanguage\LanguageSelector.h" />
|
<ClInclude Include="Multilanguage\LanguageSelector.h" />
|
||||||
|
|
|
@ -426,6 +426,9 @@
|
||||||
<ClCompile Include="Settings\Logging Settings.cpp">
|
<ClCompile Include="Settings\Logging Settings.cpp">
|
||||||
<Filter>Source Files\N64 System Source</Filter>
|
<Filter>Source Files\N64 System Source</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="AppInit.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Image Include="User Interface\Icons\left.ico">
|
<Image Include="User Interface\Icons\left.ico">
|
||||||
|
@ -845,5 +848,8 @@
|
||||||
<ClInclude Include="Settings\Logging Settings.h">
|
<ClInclude Include="Settings\Logging Settings.h">
|
||||||
<Filter>Header Files\Settings Headers</Filter>
|
<Filter>Header Files\Settings Headers</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="AppInit.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -1,247 +1,21 @@
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
#include <Project64\AppInit.h>
|
||||||
#include "Multilanguage\LanguageSelector.h"
|
#include "Multilanguage\LanguageSelector.h"
|
||||||
#include <Tlhelp32.h>
|
|
||||||
|
|
||||||
CTraceFileLog * LogFile = NULL;
|
|
||||||
|
|
||||||
void LogLevelChanged(CTraceFileLog * LogFile)
|
|
||||||
{
|
|
||||||
LogFile->SetTraceLevel((TraceLevel)g_Settings->LoadDword(Debugger_AppLogLevel));
|
|
||||||
}
|
|
||||||
|
|
||||||
void LogFlushChanged(CTraceFileLog * LogFile)
|
|
||||||
{
|
|
||||||
LogFile->SetFlushFile(g_Settings->LoadDword(Debugger_AppLogFlush) != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitializeLog(void)
|
|
||||||
{
|
|
||||||
CPath LogFilePath(CPath::MODULE_DIRECTORY);
|
|
||||||
LogFilePath.AppendDirectory("Logs");
|
|
||||||
if (!LogFilePath.DirectoryExists())
|
|
||||||
{
|
|
||||||
LogFilePath.DirectoryCreate();
|
|
||||||
}
|
|
||||||
LogFilePath.SetNameExtension("Project64.log");
|
|
||||||
|
|
||||||
LogFile = new CTraceFileLog(LogFilePath, g_Settings->LoadDword(Debugger_AppLogFlush) != 0, Log_New, 500);
|
|
||||||
#ifdef VALIDATE_DEBUG
|
|
||||||
LogFile->SetTraceLevel((TraceLevel)(g_Settings->LoadDword(Debugger_AppLogLevel) | TraceValidate | TraceDebug));
|
|
||||||
#else
|
|
||||||
LogFile->SetTraceLevel((TraceLevel)g_Settings->LoadDword(Debugger_AppLogLevel));
|
|
||||||
#endif
|
|
||||||
AddTraceModule(LogFile);
|
|
||||||
|
|
||||||
g_Settings->RegisterChangeCB(Debugger_AppLogLevel, LogFile, (CSettings::SettingChangedFunc)LogLevelChanged);
|
|
||||||
g_Settings->RegisterChangeCB(Debugger_AppLogFlush, LogFile, (CSettings::SettingChangedFunc)LogFlushChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*bool ChangeDirPermission ( const CPath & Dir)
|
|
||||||
{
|
|
||||||
if (Dir.DirectoryExists())
|
|
||||||
{
|
|
||||||
HANDLE hDir = CreateFile(Dir,READ_CONTROL|WRITE_DAC,0,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);
|
|
||||||
if (hDir != INVALID_HANDLE_VALUE)
|
|
||||||
{
|
|
||||||
ACL * pOldDACL = NULL;
|
|
||||||
PSECURITY_DESCRIPTOR pSD = NULL;
|
|
||||||
|
|
||||||
if (GetSecurityInfo(hDir,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION,NULL,NULL,&pOldDACL,NULL,&pSD) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
bool bAdd = true;
|
|
||||||
|
|
||||||
PEXPLICIT_ACCESS_W pListOfExplictEntries;
|
|
||||||
ULONG cCountOfExplicitEntries;
|
|
||||||
if (GetExplicitEntriesFromAclW(pOldDACL,&cCountOfExplicitEntries,&pListOfExplictEntries) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < cCountOfExplicitEntries; i ++)
|
|
||||||
{
|
|
||||||
EXPLICIT_ACCESS_W &ea = pListOfExplictEntries[i];
|
|
||||||
if (ea.grfAccessMode != GRANT_ACCESS) { continue; }
|
|
||||||
if (ea.grfAccessPermissions != GENERIC_ALL) { continue; }
|
|
||||||
if ((ea.grfInheritance & (CONTAINER_INHERIT_ACE|OBJECT_INHERIT_ACE)) != (CONTAINER_INHERIT_ACE|OBJECT_INHERIT_ACE)) { continue; }
|
|
||||||
|
|
||||||
if (ea.Trustee.TrusteeType == TRUSTEE_IS_SID)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
bAdd = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bAdd)
|
|
||||||
{
|
|
||||||
EXPLICIT_ACCESS ea = {0};
|
|
||||||
ea.grfAccessMode = GRANT_ACCESS;
|
|
||||||
ea.grfAccessPermissions = GENERIC_ALL;
|
|
||||||
ea.grfInheritance = CONTAINER_INHERIT_ACE|OBJECT_INHERIT_ACE;
|
|
||||||
ea.Trustee.TrusteeType = TRUSTEE_IS_GROUP;
|
|
||||||
ea.Trustee.TrusteeForm = TRUSTEE_IS_NAME;
|
|
||||||
ea.Trustee.ptstrName = TEXT("Users");
|
|
||||||
|
|
||||||
ACL * pNewDACL = NULL;
|
|
||||||
SetEntriesInAcl(1,&ea,pOldDACL,&pNewDACL);
|
|
||||||
|
|
||||||
SetSecurityInfo(hDir,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION,NULL,NULL,pNewDACL,NULL);
|
|
||||||
LocalFree(pNewDACL);
|
|
||||||
}
|
|
||||||
LocalFree(pSD);
|
|
||||||
}
|
|
||||||
CloseHandle(hDir);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
void FixDirectories(void)
|
|
||||||
{
|
|
||||||
CPath Directory(CPath::MODULE_DIRECTORY);
|
|
||||||
Directory.AppendDirectory("Config");
|
|
||||||
if (!Directory.DirectoryExists()) Directory.DirectoryCreate();
|
|
||||||
|
|
||||||
Directory.UpDirectory();
|
|
||||||
Directory.AppendDirectory("Logs");
|
|
||||||
if (!Directory.DirectoryExists()) Directory.DirectoryCreate();
|
|
||||||
|
|
||||||
Directory.UpDirectory();
|
|
||||||
Directory.AppendDirectory("Save");
|
|
||||||
if (!Directory.DirectoryExists()) Directory.DirectoryCreate();
|
|
||||||
|
|
||||||
Directory.UpDirectory();
|
|
||||||
Directory.AppendDirectory("Screenshots");
|
|
||||||
if (!Directory.DirectoryExists()) Directory.DirectoryCreate();
|
|
||||||
|
|
||||||
Directory.UpDirectory();
|
|
||||||
Directory.AppendDirectory("textures");
|
|
||||||
if (!Directory.DirectoryExists()) Directory.DirectoryCreate();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TerminatedExistingEmu()
|
|
||||||
{
|
|
||||||
bool bTerminated = false;
|
|
||||||
bool AskedUser = false;
|
|
||||||
DWORD pid = GetCurrentProcessId();
|
|
||||||
|
|
||||||
HANDLE nSearch = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
|
|
||||||
if (nSearch != INVALID_HANDLE_VALUE)
|
|
||||||
{
|
|
||||||
PROCESSENTRY32 lppe;
|
|
||||||
|
|
||||||
memset(&lppe, 0, sizeof(PROCESSENTRY32));
|
|
||||||
lppe.dwSize = sizeof(PROCESSENTRY32);
|
|
||||||
stdstr ModuleName = CPath(CPath::MODULE_FILE).GetNameExtension();
|
|
||||||
|
|
||||||
if (Process32First(nSearch, &lppe))
|
|
||||||
{
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (_stricmp(lppe.szExeFile, ModuleName.c_str()) != 0 ||
|
|
||||||
lppe.th32ProcessID == pid)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!AskedUser)
|
|
||||||
{
|
|
||||||
AskedUser = true;
|
|
||||||
int res = MessageBox(NULL, stdstr_f("Project64.exe currently running\n\nTerminate pid %d now?", lppe.th32ProcessID).c_str(), "Terminate project64", MB_YESNO | MB_ICONEXCLAMATION);
|
|
||||||
if (res != IDYES)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
HANDLE hHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, lppe.th32ProcessID);
|
|
||||||
if (hHandle != NULL)
|
|
||||||
{
|
|
||||||
if (TerminateProcess(hHandle, 0))
|
|
||||||
{
|
|
||||||
bTerminated = true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
MessageBox(NULL, stdstr_f("Failed to terminate pid %d", lppe.th32ProcessID).c_str(), "Terminate project64 failed!", MB_YESNO | MB_ICONEXCLAMATION);
|
|
||||||
}
|
|
||||||
CloseHandle(hHandle);
|
|
||||||
}
|
|
||||||
} while (Process32Next(nSearch, &lppe));
|
|
||||||
}
|
|
||||||
CloseHandle(nSearch);
|
|
||||||
}
|
|
||||||
return bTerminated;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char * AppName(void)
|
|
||||||
{
|
|
||||||
static stdstr Name;
|
|
||||||
if (Name.empty())
|
|
||||||
{
|
|
||||||
Name = stdstr_f("Project64 %s", VER_FILE_VERSION_STR);
|
|
||||||
}
|
|
||||||
return Name.c_str();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef WINDOWS_UI
|
|
||||||
int main(int argc, char* argv[])
|
|
||||||
{
|
|
||||||
while (argc > 0)
|
|
||||||
{
|
|
||||||
puts(argv[--argc]);
|
|
||||||
}
|
|
||||||
putchar('\n');
|
|
||||||
|
|
||||||
fprintf(
|
|
||||||
stderr,
|
|
||||||
"Cross-platform (graphical/terminal?) UI not yet implemented.\n"
|
|
||||||
);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /*lpszArgs*/, int /*nWinMode*/)
|
int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /*lpszArgs*/, int /*nWinMode*/)
|
||||||
{
|
{
|
||||||
FixDirectories();
|
|
||||||
|
|
||||||
char *lbuffer = new char[10];
|
|
||||||
if (GetLocaleInfoA(LOCALE_SYSTEM_DEFAULT, LOCALE_SABBREVLANGNAME, lbuffer, 10))
|
|
||||||
setlocale(LC_ALL, lbuffer);
|
|
||||||
delete[] lbuffer;
|
|
||||||
|
|
||||||
CoInitialize(NULL);
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL);
|
CoInitialize(NULL);
|
||||||
g_Settings = new CSettings;
|
AppInit(&Notify());
|
||||||
g_Settings->Initialize(AppName());
|
if (!g_Lang->IsLanguageLoaded())
|
||||||
|
|
||||||
if (g_Settings->LoadBool(Setting_CheckEmuRunning) &&
|
|
||||||
TerminatedExistingEmu())
|
|
||||||
{
|
|
||||||
delete g_Settings;
|
|
||||||
g_Settings = new CSettings;
|
|
||||||
g_Settings->Initialize(AppName());
|
|
||||||
}
|
|
||||||
|
|
||||||
InitializeLog();
|
|
||||||
|
|
||||||
WriteTrace(TraceDebug, __FUNCTION__ ": Application Starting");
|
|
||||||
CMipsMemoryVM::ReserveMemory();
|
|
||||||
|
|
||||||
g_Notify = &Notify();
|
|
||||||
|
|
||||||
//Create the plugin container
|
|
||||||
WriteTrace(TraceDebug, __FUNCTION__ ": Create Plugins");
|
|
||||||
g_Plugins = new CPlugins(g_Settings->LoadStringVal(Directory_Plugin));
|
|
||||||
|
|
||||||
//Select the language
|
|
||||||
g_Lang = new CLanguage();
|
|
||||||
if (!g_Lang->LoadCurrentStrings())
|
|
||||||
{
|
{
|
||||||
CLanguageSelector().Select();
|
CLanguageSelector().Select();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Create the main window with Menu
|
//Create the main window with Menu
|
||||||
WriteTrace(TraceDebug, __FUNCTION__ ": Create Main Window");
|
WriteTrace(TraceDebug, __FUNCTION__ ": Create Main Window");
|
||||||
stdstr WinTitle(AppName());
|
CMainGui MainWindow(true, stdstr_f("Project64 %s", VER_FILE_VERSION_STR).c_str()), HiddenWindow(false);
|
||||||
|
|
||||||
WinTitle.Format("Project64 %s", VER_FILE_VERSION_STR);
|
|
||||||
|
|
||||||
CMainGui MainWindow(true, WinTitle.c_str()), HiddenWindow(false);
|
|
||||||
CMainMenu MainMenu(&MainWindow);
|
CMainMenu MainMenu(&MainWindow);
|
||||||
g_Plugins->SetRenderWindows(&MainWindow, &HiddenWindow);
|
g_Plugins->SetRenderWindows(&MainWindow, &HiddenWindow);
|
||||||
Notify().SetMainWindow(&MainWindow);
|
Notify().SetMainWindow(&MainWindow);
|
||||||
|
@ -280,27 +54,13 @@ int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /
|
||||||
g_BaseSystem = NULL;
|
g_BaseSystem = NULL;
|
||||||
}
|
}
|
||||||
WriteTrace(TraceDebug, __FUNCTION__ ": System Closed");
|
WriteTrace(TraceDebug, __FUNCTION__ ": System Closed");
|
||||||
|
|
||||||
g_Settings->UnregisterChangeCB(Debugger_AppLogLevel, LogFile, (CSettings::SettingChangedFunc)LogLevelChanged);
|
|
||||||
g_Settings->UnregisterChangeCB(Debugger_AppLogFlush, LogFile, (CSettings::SettingChangedFunc)LogFlushChanged);
|
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
WriteTraceF(TraceError, __FUNCTION__ ": Exception caught (File: \"%s\" Line: %d)", __FILE__, __LINE__);
|
WriteTraceF(TraceError, __FUNCTION__ ": Exception caught (File: \"%s\" Line: %d)", __FILE__, __LINE__);
|
||||||
MessageBox(NULL, stdstr_f("Exception caught\nFile: %s\nLine: %d", __FILE__, __LINE__).c_str(), "Exception", MB_OK);
|
MessageBox(NULL, stdstr_f("Exception caught\nFile: %s\nLine: %d", __FILE__, __LINE__).c_str(), "Exception", MB_OK);
|
||||||
}
|
}
|
||||||
WriteTrace(TraceDebug, __FUNCTION__ ": cleaning up global objects");
|
AppCleanup();
|
||||||
|
|
||||||
if (g_Rom) { delete g_Rom; g_Rom = NULL; }
|
|
||||||
if (g_Plugins) { delete g_Plugins; g_Plugins = NULL; }
|
|
||||||
if (g_Settings) { delete g_Settings; g_Settings = NULL; }
|
|
||||||
if (g_Lang) { delete g_Lang; g_Lang = NULL; }
|
|
||||||
|
|
||||||
CMipsMemoryVM::FreeReservedMemory();
|
|
||||||
|
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
WriteTrace(TraceDebug, __FUNCTION__ ": Done");
|
|
||||||
CloseTrace();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
|
Loading…
Reference in New Issue