Sdílet prostřednictvím


/clr – omezení

Poznámka: následující omezení použití /clr:

  • Obslužné rutiny strukturované výjimky existují omezení při používání _alloca při kompilaci s /clr.Další informace naleznete v tématu _alloca.

  • Použití kontroly chyb běhu není platný s /clr.Další informace naleznete v tématu Kontroluje chyby Run-Time.

  • Při /clr je využívání vložené sestavení použité ke kompilaci programu, který používá pouze standardní syntaxe jazyka C++, platí následující pokyny:

    • Vložený kód sestavení, která předpokládá znalosti o nativním zásobníku, mimo aktuální funkce nebo jiné nižší úrovně informací o počítači konvence volání může selhat v případě použitý znalosti na zásobníku pro spravované funkce.Funkce obsahující vložený kód sestavení jsou generovány jako nespravované funkce, jako kdyby byly umístěny v samostatném modulu, který byl kompilován bez /clr.

    • Kódu sestavení vložené ve funkcích, které předat parametry vytvořené kopie funkce není podporována.

  • Vprintf funkce nelze volat z programu kompilována s /clr.

  • Nahá__declspec Modifikátor je ignorován v rámci/CLR. 

  • Nastavit funkci překladač _set_se_translator ovlivní pouze úlovky v nespravovaném kódu.Další informace naleznete v tématu Zpracování výjimek (rozšíření komponent C++).

  • Porovnání ukazatelů funkcí není povolen v /clr.

  • Není povoleno použití funkce, které nejsou plně prototypem pod /clr.

  • Následující možnosti kompilátoru, které nejsou podporovány s /clr:

  • Kombinace _STATIC_CPPLIB Definice preprocesoru (/D_STATIC_CPPLIB) a /clr nebo /clr:pure není podporována možnost kompilátoru.To je tak, protože definice by způsobit aplikace propojení s statické s více podprocesy Standard C++ Library, která není podporována.Další informace naleznete v tématu /MD, /MT, /LD (Použít běhovou knihovnu).

  • / J není podporován s /clr:safe nebo /clr:pure.

  • Mód čisté kompilace nepodporuje knihovny ATL a MFC (/clr:pure).Můžete použít /clr:pure s Standard C++ Library a CRT, pokud kompilujete také s /MD nebo /MDd.

  • Při použití /Zi s /clr, jsou důsledky výkonu.Další informace naleznete v tématu /Zi.

  • Široký znak předány rozhraní.NET Framework bez určení také výstup rutiny /Zc:wchar_t nebo bez znaku obsazení __wchar_t způsobí, že výstup bude zobrazen jako unsigned short int.Příklad:

    Console::WriteLine(L' ')              // Will output 32.
    Console::WriteLine((__wchar_t)L' ')   // Will output a space.
    
  • /GS je ignorován při kompilaci s /clr, pokud je funkce pod #pragma nespravované nebo pokud funkce musí být kompilován do nativní, v takovém případě kompilátor vygeneruje upozornění C4793, ve výchozím nastavení je vypnuto.

  • Viz /Entry požadavky na funkce podpis spravované aplikace.

  • Aplikace je kompilována s /openmp a /clr lze spustit pouze v jedné doméně appdomain procesu. Další informace naleznete v tématu /openmp (Povolit podporu OpenMP 2.0).

  • Funkcí, které přijímají proměnný počet argumentů (varargs) budou generovány jako nativní funkce.Všechny spravované datové typy v poloze proměnné argument, bude zařazen do nativní typy.Všimněte si, že String typy jsou skutečně širokého znaku řetězce, ale jejich přeuspořádány na jednobajtové znakové řetězce.Tak pokud specifikátor printf %S (wchar_t *), to bude zařazování řetězec %s místo.

  • Při použití makra va_arg, můžete získat neočekávané výsledky při kompilaci s /clr:pure. Další informace naleznete v tématu va_arg, va_copy, va_end, va_start.

  • Pokud aplikace předá argument typu va_list do funkce deklarované se proměnný počet argumentů, a aplikace je kompilována s /clr:pure, vyvolá NotSupportedException.Pokud /clr se používá místo toho ovlivněné funkcí jsou kompilovány do nativního kódu a správně spustit.Pokud /clr:safe je použit, jsou vydávány Diagnostika chybě.

  • Neměl volat ze spravovaného kódu, všechny funkce, které projde zásobník, chcete-li získat informace o parametru (argumenty); vrstvy P/Invoke způsobí, že tyto informace dále dolů do zásobníku. Například nelze kompilovat proxy/stub s /clr.

  • Funkce bude zkompilován pro spravovaný kód, pokud je to možné, ale ne všechny C++ konstrukce lze převést na spravovaný kód. Toto rozhodnutí je učiněno na základě funkce funkce.Pokud některá část funkce nelze převést na spravovaný kód, celá funkce budou převedeny místo do nativního kódu.Těchto případech kompilátor zabránit vytváření spravovaného kódu.

    • Kompilátor generovat převody nebo pomocné funkce.Nativní převody jsou generovány pro každé volání funkce prostřednictvím ukazatele na funkci, včetně volání virtuální funkce.

    • Toto volání funkce setjmp nebo longjmp.

    • Funkce, které používají určité vnitřní rutiny lze přímo manipulovat s prostředky počítače.Například použití __enable a __disable, _ReturnAddress a _AddressOfReturnAddress, nebo vnitřní multimediální objekty budou všechny výsledky v nativním kódu.

    • Funkce tohoto zpracování #pragma unmanaged směrnice. (Všimněte si, že inverzní, #pragma managed, je také podporováno.)

    • Funkce, která obsahuje odkazy na zarovnání typy, typy deklarovány pomocí __declspec(align(...)).

  • Nelze použít Podpora kompilátoru modelu COM třídy s /clr:pure nebo /clr:safe.

Viz také

Referenční dokumentace

/clr (Common Language Runtime)