Main.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // main.cpp
  3. //
  4. // Copyright (c) 2003, Electronic Arts Inc. All rights reserved.
  5. // Created by Paul Pedriana
  6. ///////////////////////////////////////////////////////////////////////////////
  7. void MyCustomWinRtEntry();
  8. #define EAMAIN_WINRT_APPLICATION_ENTRY MyCustomWinRtEntry
  9. #include <EAAssert/eaassert.h>
  10. #include <EABase/eabase.h>
  11. #include <EAMain/EAMain.h>
  12. #include <EAMain/EAEntryPointMain.inl>
  13. #include <string.h>
  14. #ifdef _MSC_VER
  15. #pragma warning(push, 0)
  16. #endif
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #if defined(EA_COMPILER_MSVC) && defined(EA_PLATFORM_MICROSOFT)
  20. #include <crtdbg.h>
  21. #include <Windows.h>
  22. #endif
  23. #ifdef _MSC_VER
  24. #pragma warning(pop)
  25. #endif
  26. #include "eathread/eathread.h"
  27. void* operator new[](size_t size, const char* /*pName*/, int /*flags*/, unsigned /*debugFlags*/, const char* /*file*/, int /*line*/)
  28. {
  29. return operator new[](size);
  30. }
  31. void* operator new[](size_t size, size_t /*alignment*/, size_t /*alignmentOffset*/, const char* /*pName*/,
  32. int /*flags*/, unsigned /*debugFlags*/, const char* /*file*/, int /*line*/)
  33. {
  34. return operator new[](size);
  35. }
  36. ///////////////////////////////////////////////////////////////////////////////
  37. // EAMain
  38. //
  39. ref class TestApplicationView sealed : public Windows::ApplicationModel::Core::IFrameworkView
  40. {
  41. public:
  42. TestApplicationView()
  43. : mCommandLine("")
  44. {}
  45. // IFrameworkView Methods
  46. virtual void Initialize(Windows::ApplicationModel::Core::CoreApplicationView^ applicationView)
  47. {
  48. using namespace Windows::ApplicationModel::Activation;
  49. using namespace Windows::ApplicationModel::Core;
  50. applicationView->Activated += ref new Windows::Foundation::TypedEventHandler< CoreApplicationView^, IActivatedEventArgs^ >( this, &TestApplicationView::OnActivated );
  51. }
  52. virtual void SetWindow(Windows::UI::Core::CoreWindow^ window) {}
  53. virtual void Load(Platform::String^ entryPoint) {}
  54. virtual void Run();
  55. virtual void Uninitialize() {}
  56. void OnActivated( Windows::ApplicationModel::Core::CoreApplicationView^ applicationView, Windows::ApplicationModel::Activation::IActivatedEventArgs^ args ) {
  57. if (args->Kind == Windows::ApplicationModel::Activation::ActivationKind::Launch)
  58. {
  59. Windows::ApplicationModel::Activation::LaunchActivatedEventArgs ^launchArgs = (Windows::ApplicationModel::Activation::LaunchActivatedEventArgs ^) args;
  60. Platform::String ^argumentString = launchArgs->Arguments;
  61. int bufferSize = WideCharToMultiByte(
  62. CP_UTF8,
  63. 0,
  64. argumentString->Data(),
  65. argumentString->Length(),
  66. NULL,
  67. 0,
  68. NULL,
  69. NULL);
  70. mCommandLine = new char[bufferSize + 1];
  71. int rv = WideCharToMultiByte(
  72. CP_UTF8,
  73. 0,
  74. argumentString->Data(),
  75. argumentString->Length(),
  76. mCommandLine,
  77. bufferSize + 1,
  78. NULL,
  79. NULL);
  80. mCommandLine[bufferSize] = 0;
  81. EA_ASSERT(rv == bufferSize);
  82. EA_UNUSED(rv);
  83. }
  84. Windows::UI::Core::CoreWindow::GetForCurrentThread()->Activate();
  85. }
  86. private:
  87. char *mCommandLine;
  88. };
  89. void TestApplicationView::Run()
  90. {
  91. using namespace EA::EAMain;
  92. IWinRTRunner *runner = CreateWinRTRunner();
  93. CommandLine commandLine(mCommandLine, CommandLine::FLAG_NO_PROGRAM_NAME);
  94. runner->Run(commandLine.Argc(), commandLine.Argv());
  95. while (!runner->IsFinished())
  96. {
  97. EA::Thread::ThreadSleep(1);
  98. }
  99. Windows::ApplicationModel::Core::CoreApplication::Exit();
  100. }
  101. ref class TestApplicationViewSource : Windows::ApplicationModel::Core::IFrameworkViewSource
  102. {
  103. public:
  104. virtual Windows::ApplicationModel::Core::IFrameworkView^ CreateView()
  105. {
  106. return ref new TestApplicationView();
  107. }
  108. };
  109. int CustomWinRtEntryEAMain(int argc, char **argv)
  110. {
  111. EA::EAMain::Report("Success!\n");
  112. return 0;
  113. }
  114. void MyCustomWinRtEntry()
  115. {
  116. EA::EAMain::Internal::gEAMainFunction = CustomWinRtEntryEAMain;
  117. Windows::ApplicationModel::Core::CoreApplication::Run(ref new TestApplicationViewSource);
  118. }