/ CLR ograniczeń
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.
Wykorzystanie błąd w czasie wykonywania kontroli nie jest prawidłowy z /clr.Aby uzyskać więcej informacji, zobacz Sprawdza, czy błąd Run-Time.
Gdy /clr jest wykorzystywane do kompilowania program, który używa tylko standard składni języka C++, stosuje się następujące wytyczne do zastosowania Zgromadzenia wbudowane:
Kodu zestawu wbudowanego wymaga wiedzy na temat układu stosu macierzystym, wywołanie konwencje poza bieżącą funkcję lub innych niskiego poziomu informacji na temat komputera może zakończyć się niepowodzeniem jeśli wiedzy stosowany do ramek stosu zarządzanej funkcji.Zawierające kod zestawu wbudowane funkcje są generowane jako niezarządzanego funkcje, jak gdyby zostały one umieszczone w osobnych moduł, który został skompilowany bez /clr.
Kodu zestawu wbudowanego w funkcje, które parametry funkcji zbudowane kopia nie jest obsługiwane.
Vprintf funkcje nie może być wywoływana z poziomu programu, skompilowany z /clr.
Naked__declspec modyfikator jest ignorowana w obszarze/CLR.
Funkcja Tłumacz ustawiony _set_se_translator obejmie tylko połowy kodu niezarządzanego.Zobacz Obsługa wyjątków (C++ Component Extensions) Aby uzyskać więcej informacji.
Porównanie wskaźników funkcji nie jest dozwolone pod /clr.
Nie wolno używać funkcji, które nie są w pełni zdefiniowała pod /clr.
Następujące opcje kompilatora nie są obsługiwane przez /clr:
/EHscand /EHs (/clr implies /EHa (see /Eh (Model obsługi wyjątków))
/fp:strictand /fp:except (see / ol (określić zachowanie zmiennoprzecinkowych))
/ZI
Połączenie z _STATIC_CPPLIB definicji preprocesora (/D_STATIC_CPPLIB) oraz /clr lub /clr:pure nie jest obsługiwana opcja kompilatora.Dzieje się tak dlatego definicja spowodowałoby aplikacji utworzyć łącze z statyczne wielowątkowe standardowa biblioteka języka C++, który nie jest obsługiwany.Aby uzyskać więcej informacji, zobacz / /LD MD, /MT, (Użyj Run-Time Library) tematu.
/J nie jest obsługiwany przez /clr:safe lub /clr:pure.
Biblioteki ATL i MFC nie są obsługiwane przez kompilacji w trybie czystego (/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, ma wpływ na wydajność.Aby uzyskać więcej informacji, zobacz /Zi.
Przekazując szeroki znak.NET Framework wyjściowe rutynowych bez określania również /Zc:wchar_t lub bez rzutowanie znaków do __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ądzanego lub jeśli funkcja musi zostać skompilowany do macierzystych, w którym to przypadku kompilator wygeneruje ostrzeżenie C4793, która jest domyślnie wyłączona.
Zobacz /ENTRY do wymagań podpisu funkcji zarządzanych aplikacji.
Aplikacje opracowane z /openmp i /clr może być uruchamiany tylko w procesie pojedynczego elementu appdomain.Zobacz /openmp (Włącz OpenMP 2.0 obsługa) Aby uzyskać więcej informacji.
Funkcje używające zmiennej liczbie argumentów (typu varargs) zostanie wygenerowana jako funkcje macierzystym.Wszelkich typów danych zarządzanych w położeniu zmiennym argumentem będą organizowane do typów macierzystym.Należy zauważyć, że System.String typy ciągi faktycznie szerokich znaków, ale są przekazywane międzyprocesowo do ciągów znaków jednobajtowych.Więc jeśli specyfikatora printf %S (wchar_t *), to będzie MARSZAŁEK ciąg %s zamiast.
Podczas korzystania z makra va_arg, może otrzymać nieoczekiwane wyniki podczas kompilacji z /clr:pure.Aby uzyskać więcej informacji, zobacz va_arg, va_end, va_start.
Jeśli aplikacja przekazuje argumentu typu va_list do funkcji zadeklarowanych do podjęcia zmienna liczba argumentów, i aplikacja została skompilowana z /clr:pure, środowisko CLR wyrzuca NotSupportedException.Jeśli /clr jest używana zamiast funkcji dotknięte są kompilowane do kodu macierzystego i poprawnego.Jeśli /clr:safe jest używany, jest emitowany błąd diagnostyczny.
Nie należy wywoływać, z kodem zarządzanym, wszystkie funkcje, które walk stosu, aby uzyskać informacje o parametrach (argumenty funkcji); Warstwa P/Invoke powoduje, że te informacje, będzie dalej w dół stosu.Na przykład, nie skompilować obiektów proxy/stub z /clr.
Funkcje będą kompilowane do kodu zarządzanego w każdym przypadku, gdy jest to możliwe, ale nie wszystkie konstrukcje języka C++ można przetłumaczyć kodu zarządzanego.Jest wybierana na podstawie funkcji przez funkcję.Jeżeli z jakiejkolwiek części funkcji nie można przekonwertować na kod zarządzany, cała funkcja zostaną przekonwertowane na kodu macierzystego zamiast.Następujących przypadkach uniemożliwić kompilator generuje kod zarządzany.
Thunks generowanych przez kompilator lub funkcji pomocnika.Thunks macierzystego są generowane dla dowolnego wywołania funkcji za pomocą wskaźnika funkcji, łącznie z wywołań funkcji wirtualnych.
Tego wywołania funkcji setjmp lub longjmp.
Funkcje, które bezpośrednio manipulować zasoby komputera za pomocą niektórych procedur wewnętrznych.Na przykład, użycie __enable i __disable, _ReturnAddress i _AddressOfReturnAddress, lub multimedia intrinsics będą wszystkie wyniki z kodem macierzystym.
Funkcje tego postępuj zgodnie z #pragma unmanaged dyrektywy.(Należy zauważyć, że odwrotność, #pragma managed, jest także obsługiwane.)
Funkcja, która zawiera odniesienia do wyrównany typów, to znaczy typy zadeklarowane za pomocą __declspec(align(...)).
Nie można użyć Obsługa modelu COM kompilatora klasy z /clr:pure lub /clr:safe.