Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo ajuda você a resolver o erro C2491 do compilador que ocorre quando você tenta definir membros de dados como dllimport funções.
Versão original do produto: Visual C++
Número original do KB: 815647
Sintoma
Você não pode aplicar a __declspec(dllimport) palavra-chave para implementar uma função. Por exemplo, ao tentar definir membros de dados (incluindo membros de dados estáticos e funções) como dllimport funções, você recebe a seguinte mensagem de erro C2491 do compilador:
"identificador": definição da função dllimport não permitida
Causa e resolução
Você só pode aplicar a __declspec(dllimport) palavra-chave a declarações. Você não pode aplicar a __declspec(dllimport) palavra-chave para implementar funções. A finalidade dessa palavra-chave é declarar a implementação de uma função por uma DLL. Da mesma forma, se você aplicar a __declspec(dllimport) palavra-chave a um membro de dados, receberá os dados iniciais de uma DLL. Portanto, você não pode atribuir um valor em seu código inicialmente.
Você recebe o erro C2491 do compilador ao tentar compilar o seguinte código:
// function definition
void __declspec(dllimport) funcB()
{
// error C2491: 'funcB' : definition of dllimport function not allowed
}
Esse comportamento ocorre porque você definiu a implementação da função como dllimport. Para evitar esse erro do compilador, não defina a função, mas declare a função da seguinte maneira:
// function declaration
void __declspec(dllimport) funcB(); // ok
int main()
{
}
Da mesma forma, você recebe o erro C2491 do compilador ao tentar compilar o seguinte código:
//defining data member
extern __declspec(dllimport) int code = 1;
// error C2491: 'code' : definition of dllimport data not allowed
Você recebe essa mensagem de erro porque definiu o membro de dados como dllimport. Para evitar esse erro do compilador, não defina o membro de dados, mas declare o membro de dados da seguinte maneira:
// declaring data member
extern __declspec(dllimport) int code; // ok