Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
"function" : funktionen kompileras som intern kod: "reason"
Anmärkningar
Kompilatorn kan inte kompilera funktionen i hanterad kod, även om kompilatoralternativet /clr har angetts. I stället genererar kompilatorn varning C4793 och ett förklarande fortsättningsmeddelande och kompilerar sedan funktionen till intern kod. Fortsättningsmeddelandet innehåller orsakstexten som förklarar varför funktionen inte kan kompileras till .MSIL
Det här är en varning på nivå 1 när du anger alternativet /clr:pure compiler. Kompileringsalternativet /clr:pure är inaktuellt i Visual Studio 2015 och stöds inte i Visual Studio 2017.
I följande tabell visas alla möjliga fortsättningsmeddelanden.
| Orsaksmeddelande | Anmärkningar | 
|---|---|
| Justerade datatyper stöds inte i hanterad kod | CLR måste kunna allokera data efter behov, vilket kanske inte är möjligt om data är anpassade till deklarationer som __m128 eller justera. | 
| Funktioner som använder "__ImageBase" stöds inte i hanterad kod | 
              __ImageBase är en särskild länksymbol som vanligtvis endast används av intern kod på låg nivå för att läsa in en DLL. | 
| varargs stöds inte av kompilatoralternativet "/clr" | Interna funktioner kan inte anropa hanterade funktioner som har variabelargumentlistor (varargs) eftersom funktionerna har olika krav på stacklayout. Men om du anger alternativet /clr:pure compiler stöds variabelargumentlistor eftersom sammansättningen endast kan innehålla hanterade funktioner. Mer information finns i Ren och verifierbar kod (C++/CLI). | 
| 64-bitars CLR stöder inte data som deklarerats med __ptr32-modifieraren | En pekare måste ha samma storlek som en intern pekare på den aktuella plattformen. Mer information finns i __ptr32, __ptr64. | 
| 32-bitars CLR stöder inte data som deklarerats med __ptr64-modifieraren | En pekare måste ha samma storlek som en intern pekare på den aktuella plattformen. Mer information finns i __ptr32, __ptr64. | 
| En eller flera inbyggda funktioner stöds inte i hanterad kod | Namnet på den intrinsiska funktionen är inte tillgängligt när meddelandet emitteras. En inbyggd som orsakar det här meddelandet representerar dock vanligtvis en datorinstruktion på låg nivå. | 
| Inbyggd assemblerkod ("__asm") stöds inte i hanterad kod | Infogad sammansättningskod kan innehålla godtycklig intern kod som inte kan hanteras. | 
| En icke-__clrcall virtuell funktions-thunk måste kompileras som inbyggd | En icke-__clrcall virtuell funktions-thunk måste använda en ohanterad adress. | 
| En funktion som använder "_setjmp" måste kompileras som intern | CLR måste ha förmåga att styra programkörningen. Setjmp-funktionen kringgår dock den regelbundna programkörningen genom att spara och återställa information på låg nivå, till exempel register och körningstillstånd. | 
Examples
I följande exempel genereras C4793.
// C4793.cpp
// compile with: /c /clr /W3
// processor: x86
int asmfunc(void) {   // C4793, compiled as unmanaged, native code
   __asm {
      mov eax, 0
   }
}
warning C4793: 'asmfunc' : function is compiled as native code:
        Inline native assembly ('__asm') is not supported in managed code
I följande exempel genereras C4793.
// C4793_b.cpp
// compile with: /c /clr /W3
#include <setjmp.h>
jmp_buf test_buf;
void f() {
   setjmp(test_buf);   // C4793 warning
}
warning C4793: 'f' : function is compiled as native code:
        A function using '_setjmp' must be compiled as native