OS_main.cpp

Go to the documentation of this file.
00001 // $Id: OS_main.cpp 80826 2008-03-04 14:51:23Z wotte $
00002 
00003 #include "ace/OS_main.h"
00004 
00005 ACE_RCSID(ace, OS_main, "$Id: OS_main.cpp 80826 2008-03-04 14:51:23Z wotte $")
00006 
00007 #if defined (ACE_HAS_NONSTATIC_OBJECT_MANAGER) && !defined (ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER)
00008 
00009 #include "ace/Init_ACE.h"
00010 
00011 #  if !defined (ACE_HAS_MINIMAL_ACE_OS)
00012 #    include "ace/Object_Manager.h"
00013 #  endif /* ! ACE_HAS_MINIMAL_ACE_OS */
00014 
00015 // Rename "main ()" on platforms that don't allow it to be called "main ()".
00016 
00017 // Also, create ACE_Object_Manager static instance(s) in "main ()".
00018 // ACE_MAIN_OBJECT_MANAGER defines the ACE_Object_Manager(s) that will
00019 // be instantiated on the stack of main ().  Note that it is only used
00020 // when compiling main ():  its value does not affect the contents of
00021 // ace/OS.o.
00022 #  if !defined (ACE_MAIN_OBJECT_MANAGER)
00023 #    define ACE_MAIN_OBJECT_MANAGER \
00024         ACE_OS_Object_Manager ace_os_object_manager; \
00025         ACE_Object_Manager ace_object_manager;
00026 #  endif /* ! ACE_MAIN_OBJECT_MANAGER */
00027 
00028 #  if !defined (ACE_WIN32)
00029 
00030 #    if !(defined (ACE_VXWORKS) && !defined (__RTP__))
00031 /* forward declaration */
00032 extern int ace_main_i (int, char *[]);
00033 #    endif
00034 
00035 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00036 
00037 #    if defined (ACE_VXWORKS) && !defined (__RTP__)
00038 ace_main_proc_ptr vx_ace_main_i_ptr = 0;
00039 
00040 int ace_os_main_i (int argc, char *argv[]) /* user's entry point, e.g., main */
00041 {
00042   ACE_MAIN_OBJECT_MANAGER
00043   return vx_ace_main_i_ptr ? (*vx_ace_main_i_ptr) (argc, argv) : (-1);   /* what the user calls "main" */
00044 }
00045 #    else /* !ACE_VXWORKS && !__RTP__ */
00046 int ace_os_main_i (int argc, char *argv[]) /* user's entry point, e.g., main */
00047 {
00048   ACE_MAIN_OBJECT_MANAGER
00049   return ace_main_i (argc, argv);           /* what the user calls "main" */
00050 }
00051 #    endif
00052 
00053 ACE_END_VERSIONED_NAMESPACE_DECL
00054 
00055 #  elif !defined (ACE_HAS_WINCE)
00056 
00057 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00058 
00059 #    if defined (ACE_WIN32) && defined (ACE_USES_WCHAR)
00060 int ACE_Main_Base::run (int argc, ACE_TCHAR *argv[])
00061 {
00062   return this->run_i (argc, argv);
00063 }
00064 
00065 ACE_Export int
00066 ace_os_wmain_i (ACE_Main_Base &mbase, int argc, ACE_TCHAR *argv[]) /* user's entry point, e.g., main */
00067 {
00068   ACE_MAIN_OBJECT_MANAGER
00069   return mbase.run (argc, argv);           /* what the user calls "main" */
00070 }
00071 #    else /* ! (ACE_WIN32 && ACE_USES_WCHAR) */
00072 
00073 ACE_Main_Base::ACE_Main_Base ()
00074 {
00075   ACE::init ();
00076 }
00077 
00078 ACE_Main_Base::~ACE_Main_Base ()
00079 {
00080   ACE::fini ();
00081 }
00082 
00083 int ACE_Main_Base::run (int argc, char *argv[])
00084 {
00085   return this->run_i (argc, argv);
00086 }
00087 
00088 ACE_Export int
00089 ace_os_main_i (ACE_Main_Base &mbase, int argc, char *argv[]) /* user's entry point, e.g., main */
00090 {
00091   ACE_MAIN_OBJECT_MANAGER
00092   return mbase.run (argc, argv);           /* what the user calls "main" */
00093 }
00094 #    endif /* ACE_WIN32 && ACE_USES_WCHAR */
00095 
00096 ACE_END_VERSIONED_NAMESPACE_DECL
00097 
00098 #  else /* ACE_HAS_WINCE */
00099 
00100 // CE only gets a command line string;  no argv. So we need to convert it
00101 // when the main entrypoint expects argc/argv. ACE_ARGV supports this.
00102 #    include "ace/OS_NS_string.h"
00103 #    include "ace/ACE.h"
00104 #    include "ace/ARGV.h"
00105 
00106 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00107 
00108 int ACE_Main_Base::run (HINSTANCE,
00109                         HINSTANCE,
00110                         LPWSTR lpCmdLine,
00111                         int)
00112 {
00113   ACE_TCHAR cmdline[1024];
00114   ACE_OS::strcpy (cmdline, ACE_TEXT ("program "));
00115   ACE_OS::strcat (cmdline, ACE_TEXT_WCHAR_TO_TCHAR (lpCmdLine));
00116   ACE_ARGV ce_argv (cmdline);
00117   ACE::init ();
00118   ACE_MAIN_OBJECT_MANAGER
00119   int i = this->run_i (ce_argv.argc (), ce_argv.argv ());
00120   ACE::fini ();
00121   return i;
00122 }
00123 ACE_END_VERSIONED_NAMESPACE_DECL
00124 
00125 #  endif   /* !ACE_HAS_WINCE */
00126 
00127 # endif /* ACE_HAS_NONSTATIC_OBJECT_MANAGER && !ACE_HAS_WINCE && !ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER */

Generated on Tue Feb 2 17:18:41 2010 for ACE by  doxygen 1.4.7