Udostępnij za pośrednictwem


/clr Ograniczenia

Uwaga następujące ograniczenia dotyczące stosowania /clr:

  • W obsłudze structured exception, istnieją ograniczenia dotyczące korzystania z _alloca podczas kompilacji z /clr.Aby uzyskać więcej informacji, zobacz _alloca.

  • Korzystanie z błąd w czasie wykonywania kontroli nie jest prawidłowy z /clr.Aby uzyskać więcej informacji, zobacz Run-Time Error sprawdza.

  • Gdy /clr jest używana do kompilowania program, który używa tylko standardowej składni języka C++, należy przestrzegać następujących z wykorzystaniem wbudowanego zestawu:

    • Wbudowany zestaw kod, który wymaga wiedzy na temat układu stosu macierzystego, konwencje poza bieżącą funkcję lub innych niskiego poziomu informacji o komputerze wywoływania może zakończyć się niepowodzeniem jeśli zastosowanego do ramek stosu dla funkcji zarządzanych wiedzy.Zawierające kod zestaw wbudowanych funkcji są generowane jako niezarządzane funkcje, tak jakby zostały one umieszczone w oddzielny moduł, który został skompilowany bez /clr.

    • Wbudowany zestawu kodu w funkcje, które przekazać parametry funkcji zbudowane kopii nie jest obsługiwane.

  • Vprintf funkcje nie można wywołać z poziomu programu skompilowany z /clr.

  • Nago__declspec modyfikator jest ignorowana w obszarze/CLR. 

  • Zestaw funkcji Tłumacz przez _set_se_translator obejmie tylko połowy kod niezarządzany.Aby uzyskać więcej informacji, zobacz Obsługa w obszarze/CLR wyjątków.

  • Porównanie wskaźników funkcji nie jest dozwolone pod /clr.

  • Korzystanie z funkcji, które nie są w pełni prototypy jest niedozwolone w /clr.

  • Następujące opcje kompilatora nie są obsługiwane przez /clr:

  • Połączenie _STATIC_CPPLIB preprocesora definicji (/D_STATIC_CPPLIB) i /clr lub /clr:pure nie jest obsługiwana opcja kompilatora.Dzieje się tak ponieważ definicji mogłoby spowodować, że aplikacja do łączenia z statyczne wielowątkowe standardowa biblioteka języka C++, który nie jest obsługiwany.Aby uzyskać więcej informacji, zobacz temat /MD, /MT, /LD (Korzystaj z bibliotek wykonawczych).

  • J nie jest obsługiwany w /clr:safe lub /clr:pure.

  • Biblioteki ATL i MFC nie są obsługiwane w trybie wyłącznie kompilacji (/clr:pure).Można użyć /clr:pure z standardowa biblioteka języka C++ i CRT, jeśli również skompilować z /MD lub /MDd.

  • Podczas korzystania z /Zi z /clr, istnieją wpływ na wydajność.Aby uzyskać więcej informacji, zobacz /Zi.

  • Przekazywanie znak dwubajtowy do.NET Framework wyjście rutynowych bez określenia również /Zc:wchar_t lub bez oddał znak __wchar_t spowoduje, że dane wyjściowe do pojawiają się jako unsigned short int.Na przykład:

    Console::WriteLine(L' ')              // Will output 32.
    Console::WriteLine((__wchar_t)L' ')   // Will output a space.
    
  • / GS jest ignorowany podczas kompilacji z /clr, chyba że funkcja jest pod #pragma niezarządzanych lub jeśli funkcja musi zostać skompilowany do trybu macierzystego, w którym to przypadku kompilator generuje ostrzeżenie C4793, który jest domyślnie wyłączona.

  • Zobacz /ENTRY dla wymagań podpisu funkcji zarządzanych aplikacji.

  • Aplikacje skompilowane z /openmp i /clr może być uruchamiany tylko w procesie pojedynczego elementu appdomain. Aby uzyskać więcej informacji, zobacz /openmp (Włącz obsługę OpenMP 2.0).

  • Funkcje, których zmiennej liczbie argumentów (varargs) zostanie wygenerowana jako macierzystych funkcji.Wszystkie typy danych zarządzanych w położeniu zmiennym argumentem będzie można zorganizować rodzimych typów.Należy zauważyć, że String typy są ciągami faktycznie wide znaków, ale są one przekazywane międzyprocesowo do ciągów znaków jednobajtowych.Więc jeśli specyfikator printf %S (wchar_t *), to będzie organizowania na ciąg %s zamiast.

  • Podczas korzystania z makra va_arg, możesz uzyskać nieoczekiwane wyniki podczas kompilacji z /clr:pure. Aby uzyskać dodatkowe informacje, zobacz va_arg, va_copy, va_end, va_start.

  • Jeśli aplikacja przekazuje argument typu va_list do funkcji zadeklarowanych do podjęcia zmiennej liczbie argumentów, i aplikacja została skompilowana z /clr:pure, rzuca CLR NotSupportedException.Jeśli /clr jest używany zamiast funkcji usterce jest kompilowany do kodu macierzystego i poprawnie wykonać.Jeśli /clr:safe jest używany, emitowanych błąd diagnostyczny.

  • Nie należy wywoływać, z kodu zarządzanego, wszelkie funkcje, które pomagają stosu, aby uzyskać informacje na temat parametrów (argumentów funkcji); Warstwa P i Invoke powoduje, że te informacje być w dalszym ciągu w dół stosu. Na przykład, nie skompilować serwera proxy/stub z /clr.

  • Funkcje zostanie skompilowany do kodu zarządzanego, jeśli to możliwe, ale nie wszystkie konstrukcje języka C++ można tłumaczyć kodu zarządzanego. Grupa jest wybierana na podstawie funkcji przez funkcję.Jeśli jakąkolwiek częścią funkcji nie można przekonwertować na kod zarządzany, Cała funkcja zostaną przekonwertowane do kodu macierzystego w zamian.Następujących przypadkach uniemożliwić kompilator generuje kod zarządzany.

    • Generowanych przez kompilator łącznikami lub funkcji pomocnika.Macierzysty łącznikami są generowane dla każde wywołanie funkcji za pomocą wskaźnika funkcji, łącznie z wywołaniami funkcji wirtualnych.

    • Funkcje tego wywołania setjmp lub longjmp.

    • Funkcje, które bezpośrednio zaznaczać zasoby komputera za pomocą niektórych procedur wewnętrznych.Na przykład, użycie __enable i __disable, _ReturnAddress i _AddressOfReturnAddress, lub multimedia intrinsics zostaną wszystkie wyniki w kodzie macierzystym.

    • Funkcje, które następują #pragma unmanaged dyrektywy. (Należy zauważyć, że odwrotność, #pragma managed, jest także obsługiwane.)

    • Funkcja, która zawiera odwołania do wyrównane typów, czyli typy zadeklarowane za pomocą __declspec(align(...)).

  • Nie można użyć Obsługa kompilatora COM klasy z /clr:pure lub /clr:safe.

Zobacz też

Informacje

/clr (Kompilacja środowiska uruchomieniowego języka wspólnego)