Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

Entrypoint & CRT startup

Se in C# questo snippet:

using System;
using System.Reflection;
 
class Foo
{
      static void Main()
      {
            Console.WriteLine(Assembly.GetEntryAssembly().EntryPoint.Name);
      }
}

stampa Main a console, non la stessa cosa si può dire dell'equivalente C++:

using namespace System;
using namespace System::Reflection;
 
void main()
{
    Console::WriteLine(Assembly::GetEntryAssembly()->EntryPoint->Name);
}

che stampa a console:

  • main
  • mainCRTStartup oppure
  • _mainCRTStartup

in base alle opzioni:

  • /clr:safe
  • /clr:pure rispettivamente
  • /clr:oldSyntax (oppure /clr:initialAppDomain)

dove mainCRTStartup e _mainCRTStartup sono funzioni di C/C++ run-time startup. Il compilatore (tranne nel caso /clr:safe) chiama prima queste funzioni per le inizializzazioni necessarie alla C/C++ run-time library (variabili globali, heap, etc) e quindi saranno loro quelle decorate con .entrypoint in IL e non il metodo main dello snippet. L'opzione /clr:safe invece, produce codice verificabile e non offre supporto CRT e quindi niente stub.

Print | posted on venerdì 14 ottobre 2005 16:16 | Filed Under [ Carillon .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET