Erro do compilador C3068
'function': uma função 'naked' não pode conter objetos que exigiriam desenrolamento se uma exceção C++ ocorresse
O compilador não pôde executar o desenrolamento de pilha em uma função naked que gerou uma exceção porque um objeto temporário foi criado na função e o tratamento de exceção C++ (/EHsc) foi especificado.
Para resolver esse erro, siga um ou mais dos seguintes procedimentos:
Não compile com /EHsc.
Não marque a função como
naked
.Não crie um objeto temporário na função.
Se uma função criar um objeto temporário na pilha, se a função gerar uma exceção e se o tratamento de exceção C++ estiver habilitado, o compilador limpará a pilha se uma exceção for lançada.
Quando uma exceção for gerada, o código gerados pelo compilador, chamado de prólogo e epílogo (que não estão presentes em uma função naked), é executado para uma função.
Exemplo
O seguinte exemplo gera o erro C3068:
// C3068.cpp
// compile with: /EHsc
// processor: x86
class A {
public:
A(){}
~A(){}
};
void b(A){}
__declspec(naked) void c() {
b(A()); // C3068
};