OS_main.cpp

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

Generated on Thu Nov 9 09:41:57 2006 for ACE by doxygen 1.3.6