Hej, undar om det går att göra C# som inte utnyttjar CLR (garbage collection m.m) nånting, alltså att hela koden markeras som "unmanaged" ? Det går inte med den kompilatorn som följer med .NET SDK'n. Så alltså är svaret nej för den C# som Microsoft levererar. Nej med C# går det inte. Men om du använder Visual C++ .NET så kan du gör lite olika kombinationer. VC++ innehåller Managed Extensions som gör att du kan skapa C++ kod som körs mot CLR, det intressanta är att man kan skapa klasser som körs i CLR men som inte använder GC."Unmanaged code" överallt
Verkar kanske konstigt att vilja göra ett sådant program, men jag skriver en uppsats om .NET så det därför jag undrar.
Tack på förhand!
// PerSv: "Unmanaged code" överallt
Men jag har hört rykten om att någon har skrivit en kompilator för C# som kompilerar till native code (alltså unmanaged) men då har man inte kunnat använda .NET's ramverk av klasser på något sätt, utan det är bara syntax mässigt det liknar MS C#.Sv: "Unmanaged code" överallt
Genom att använda /clr vid kompileringen så skapas en .NET Assembly och inte en normal x86-image. Dina klasser blir då Managed Code.
Det som du färemot inte får automatiskt är garbage collection. För att få det så måste du explicit tala om att en klass ska hanteras av .NETs minneshantering, detta gör man genom att ange __gc i klass deklarationen. Då får man Managed Data.
Så i C++ är inte Managed Code och Managed Data i 1-1 förhållande, man kan ha det ena utan det andra.
<code>
public __gc class CommunicationHelper
{
public:
RHANDLE Login(bool isSending, String* saddr, int port, String* id);
void Logoff(RHANDLE bbHandle);
System::String* Receive(RHANDLE bbHandle);
void Send(RHANDLE bbHandle, String* transactionName, String* message, String* from, bool fromApplication, String* to, bool toApplication);
private:
void CheckResult(LONG rc);
};
</code>
Ett bra användningsområde för managed c++ är när man har ett existerande API som kräver handles, structures, etc. för kommunikation. Istället för att manuellt definiera allt detta i C# kan man direkt använda det från C++. Genom att skapa en managed C++ klass så kan den sedan lätt refereras från ditt egentliga projekt (skrivet i C# eller VB.NET).
Visual C++ .NET är alltså det enda verktyg . Visual Studio .NET som du kan skapa native/unmanaged kod med.
/Mattias