Reglas y Limitaciones para las funciones descubiertas

Específicos de Microsoft

Las reglas y las siguientes limitaciones se aplican a las funciones descubiertas:

  • La instrucción de return no está permitido.

  • Las construcciones de control estructurado de excepciones y el control de excepciones de C++ no se permiten porque deben desenredar a través del marco de pila.

  • por la misma razón, cualquier formulario de setjmp se prohíbe.

  • el uso de la función de _alloca se prohíbe.

  • Para asegurarse de que ningún código de inicialización para las variables locales se produzca antes de la secuencia de prólogo, las variables locales inicializadas no se permiten en el ámbito de la función.En particular, la declaración de objetos de C++ no se permite en el ámbito de la función.puede, sin embargo, haber datos inicializados en un ámbito anidado.

  • El puntero de capítulo que la optimización (la opción del compilador /Oy) no se recomienda, sólo que automáticamente se suprime en una función naked.

  • No se puede declarar objetos de clase de C++ en el ámbito léxico de la función.Puede, sin embargo, declarar objetos en un bloque anidado.

  • Se omite la palabra clave de naked al compilar con /clr.

  • Para las funciones descubiertas de __fastcall , siempre que haya una referencia en código de C/C++ en uno de los argumentos del registro, el código de prólogo debe almacenar los valores del registro en la ubicación de la pila para esa variable.Por ejemplo:

// nkdfastcl.cpp
// compile with: /c
// processor: x86
__declspec(naked) int __fastcall  power(int i, int j) {
   // calculates i^j, assumes that j >= 0

   // prolog
   __asm {
      push ebp
      mov ebp, esp
      sub esp, __LOCAL_SIZE
     // store ECX and EDX into stack locations allocated for i and j
     mov i, ecx
     mov j, edx
   }

   {
      int k = 1;   // return value
      while (j-- > 0) 
         k *= i;
      __asm { 
         mov eax, k 
      };
   }

   // epilog
   __asm {
      mov esp, ebp
      pop ebp
      ret
   }
}

Vea también

Referencia

Llamadas de función descubiertas