Kompilator ostrzeżenia (poziom 1 i 3) C4793
"Funkcja": funkcja jest kompilowany jako kodu macierzystego: "przyczyny"
Kompilator nie można skompilować funkcji do kodu zarządzanego, nawet jeśli /CLR określono opcję kompilatora.Zamiast tego, kompilator emituje ostrzeżenie C4793 i komunikat wyjaśniający kontynuacji i następnie kompiluje funkcji do kodu macierzystego.Wiadomość kontynuację zawiera Przyczyna tekst, który wyjaśnia, dlaczego funkcji nie można skompilować do MSIL.
Jest to poziom 1 ostrzeżenie podczas określania /clr:pure opcję kompilatora.
Poniższa tabela zawiera listę wszystkich wiadomości ewentualnej kontynuacji.
Przyczyny komunikatu |
Uwagi |
---|---|
Typy wyrównane dane nie są obsługiwane w kodzie zarządzanym. |
Środowisko CLR musi być w stanie przydzielić danych, w razie potrzeby, która może być niemożliwe, jeśli dane są wyrównane z deklaracjami, takich jak __m128 lub wyrównać. |
Funkcje korzystające z "__ImageBase" nie są obsługiwane w kodzie zarządzanym. |
__ImageBasejest symbolem specjalny program łączący, który zazwyczaj jest używany tylko przez niskiego poziomu kodu macierzystego do załadowania biblioteki DLL. |
typu VarArgs nie są obsługiwane przez ' / clr' opcję kompilatora |
Funkcje macierzysty nie można wywołać zarządzane funkcje, które mają Wyświetla listę zmiennych, argument (typu varargs) ponieważ wymagania układu stosu różne funkcje.Jednakże jeśli zostanie określony /clr:pure opcję kompilatora, zmiennym argumentem list są obsługiwane, ponieważ zestaw może zawierać tylko funkcje zarządzania.Aby uzyskać więcej informacji, zobacz Kod czystej i zweryfikowania (C + +/ CLI). |
CLR 64-bitowe nie obsługuje danych zgłoszonych przy pomocy modyfikatora __ptr32 |
Wskaźnik musi być taki sam rozmiar jak native wskaźnik na bieżącej platformie.Aby uzyskać więcej informacji, zobacz __ptr32, __ptr64. |
32-Bitowe środowisko CLR nie obsługuje danych zgłoszonych przy pomocy modyfikatora __ptr64 |
Wskaźnik musi być taki sam rozmiar jak native wskaźnik na bieżącej platformie.Aby uzyskać więcej informacji, zobacz __ptr32, __ptr64. |
Jeden lub więcej intrinsics nie jest obsługiwana w kodzie zarządzanym. |
Nazwa wewnętrzna nie jest dostępny w czasie, który jest emitowany komunikat.Jednakże wewnętrzna, która powoduje, że ten komunikat zwykle reprezentuje instrukcji maszyny niskiego poziomu. |
Zgromadzenie macierzystym wbudowanej (__asm) nie jest obsługiwana w kodzie zarządzanym. |
Wbudowany zestaw kodu może zawierać dowolnego kodu macierzystego, które nie mogą być zarządzane. |
Thunk funkcję wirtualną non __clrcall musi zostać skompilowany jako macierzysty |
Non-__clrcall funkcję wirtualną thunk należy użyć adresu niezarządzanego. |
Funkcję za pomocą '_setjmp' musi zostać skompilowany jako macierzysty |
CLR musi być w stanie kontrolować wykonywanie programów.Jednakże setjmp funkcji pomija wykonywanie regularnych programów poprzez zapisywanie i przywracanie niskiego poziomu informacji, takich jak rejestrów i stan wykonania. |
Przykład
Poniższy przykład generuje C4793.
// C4793.cpp
// compile with: /c /clr /W3
// processor: x86
int asmfunc(void) { // C4793, compiled as unmanaged, native code
__asm {
mov eax, 0
}
}
Poniższy przykład generuje C4793.
// C4793_b.cpp
// compile with: /c /clr /W3
#include <setjmp.h>
jmp_buf test_buf;
void f() {
setjmp(test_buf); // C4793 warning
}