Erro do compilador C2491 ao tentar definir membros de dados como funções dllimport

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