Autoři platformy .NET a jazyka C# umožnili programátorům použít stávající programy. Používáme-li takovéto programy, zříkáme se výhod, které poskytuje CLR. Hovoříme pak o neřízeném kódu. Existují tři hlavní oblasti použití.
Spolupráce s komponentami modelu COM - schopnost prostředí .NET používat komponenty modelu COM a naopak komponentám modelu COM používat prvky prostředí .NET.
Použití existující COM komponenty v .NET aplikaci.
Nejprve je nutné COM komponentu registrovat v registry (nástroj regsvr32.exe).
Vytvoříme nový projekt v jazyce C#. V okně Solution Explorer aplikace Visual Studio vybereme položku Add Reference.
Najdeme příslušnou COM komponentu.
Reference na tuto komponentu byla přidána a lze ji normálně používat (tedy instanciovat a pak volat její metody,....).
Použití .NET komponenty na místo COM komponenty.
Vytvoříme nový C# projekt typu Class Library.
Komponentu musíme zaregistrovat v Registry. K tomu složí nástroj regasm.exe.
Pro programy, které pracují s typovanými knihovnami lze vygenerovat potřebný .tlb soubor nástrojem tlbexp.exe
Pak lze tuto komponentu využívat stejně jako COM komponentu.
Více o spolupráci s COM komponentami bude v následujících kapitolách.
Spolupráce s běžnými knihovnami DLL - tyto služby umožňují programátorům v prostředí .NET používat knihovny DLL. Následující příklad ukazuje volání metody MessageBox z knihovny User32.dll.
using System; using System.Runtime.InteropServices; class RunApp { [DllImport("user32.dll", EntryPoint="MessageBox")] static extern int NiceWindow(int hWnd, string msg,string caption,int type); static void Main(string[] args) { NiceWindow(0,"Hello world!","C# is calling!",0); } }
Platform Invocation Services (PInvoke) - tyto služby umožňují řízenému kódu pracovat s knihovnami a funkcemi exportovanými z dynamických knihoven.
Knihovna DLL je importovaná pomocí atributu DllImport.
Importované funkce musí být označeny jako externí (klíčové slovo extern).
Importovanou funkci lze pro použití v jazyce C# přejmenovat. Slouží k tomu pojmenovaný parametr EntryPoint atributu DllImport.
Nezabezpečený kód - umožňuje programátorům v jazyce C# používat například ukazatele. Takto vytvořený program není spravován CLR systému .NET.
Blok je definován pomocí klíčového slova unsafe a složenými závorkami.
Klíčové slovo unsafe lze použít také jako modifikátor u metody případně tříd.
Je nutné překladači povolit unsafe bloky (Project-Properties-Configuration Properties-Build-Allow Unsafe Code Blocks).
Používáme-li přímý přístup do paměti, mohlo by dojít ke srážce s algoritmem garbage collection.
Klíčové slovo fixed je nástrojem určeným pro znehybnění kusu paměti.
fixed (type* pointer = expression) statement