Sdílet prostřednictvím


/CLR omezení

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

  • Obslužné rutiny strukturované výjimky, jsou omezení použití _alloca při kompilaci s /clr.Další informace naleznete v _alloca.

  • Chyba při spuštění kontroly použití není platný s /clr.Další informace naleznete v tématu Kontroluje chyby runtime.

  • Při /clr je pro kompilaci programu, který používá pouze standardní syntaxe jazyka C++, následující pokyny se vztahují k použití vložených sestavení:

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

    • Kód ve funkcích, které projdou parametry funkce Kopírovat vyrobeno sestavení není podporován.

  • Vprintf funkce nelze volat z program zkompilován s /clr.

  • Holé__declspec modifikátor ignorován pod /clr. 

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

  • Porovnání ukazatelů funkcí není povoleno pod /clr.

  • Nepovoluje použití funkcí, které nejsou plně prototyped /clr.

  • Nejsou podporovány následující volby kompilátoru s /clr:

  • Kombinace _STATIC_CPPLIB definice preprocesoru (/D_STATIC_CPPLIB) a /clr nebo /clr:pure kompilátor možnost není podporována.Důvodem je, že definice by způsobilo aplikace k propojení s statické podprocesy Knihovna Standard C++, který není podporován.Další informace získáte v tématu / /LD MD, /MT, (použití knihovna Run-Time).

  • /J nejsou podporovány s /clr:safe nebo /clr:pure.

  • Kompilace čistého režimu nejsou podporovány knihovny ATL a MFC (/clr:pure).Můžete použít /clr:pure s Standard C++ Library a CRT, pokud také kompilace s /MD nebo /MDd.

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

  • Předávání široký znak.NET Framework výstup bez určení také rutina /Zc:wchar_t nebo bez obsazení znaku __wchar_t způsobí, že výstup 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 varování C4793, ve výchozím nastavení je vypnuto.

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

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

  • Funkce, které proměnné počet argumentů (varargs) budou generovány jako nativní funkce.Nativní typy bude zařadit všechny spravované datové typy v poloze proměnné argument.Všimněte si, že System.String typy jsou skutečně celého řetězce, ale jsou zařadit na jednobajtové znakové řetězce.Proto pokud specifikátor printf %S (wchar_t *), jej bude zařazování řetězec %s místo.

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

  • Pokud aplikace předá argument typu Typ va_list funkce deklarované vzít proměnné počet argumentů, a aplikace je kompilována s /clr:pure, vyvolá CLR 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žita, je chyba diagnostické vyzařovaného.

  • By není volání, spravovaný kód, všechny funkce, které vás zásobníku získat informace parametrů (argumentů funkce); P/Invoke vrstva způsobuje, že je dále k zásobníku.Například nelze kompilovat proxy či stub s /clr.

  • Funkce bude zpracován pro spravovaný kód, kdykoli je to možné, ale ne všechny konstrukce jazyka C++ lze přeložit do spravovaného kódu.Toto rozhodnutí je učiněno na základě funkce pomocí funkce.Pokud žádnou část funkce nelze převést na spravovaný kód, celý funkce budou převedeny na nativní kód místo.Následujících případech zabránit Kompilátor generuje spravovaný kód.

    • Thunks generovaný kompilátorem nebo pomocné funkce.Nativní thunks jsou generovány pro každé volání funkce prostřednictvím funkce ukazatele, včetně volání funkce virtuální.

    • Volání funkce setjmp nebo longjmp.

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

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

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

  • Nelze použít Kompilátor podporu modelu COM třídy s /clr:pure nebo /clr:safe.

Viz také

Referenční dokumentace

/CLR (kompilace společné Language Runtime)