/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:
/EHscand /EHs (/clr implies /EHa (see /EH (Model obsługi wyjątku))
/fp:strictand /fp:except (see /fp (Określenie zachowania zmiennoprzecinkowego))
/ZI
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)