Freigeben über


Compiler C2491-Fehler beim Versuch, Datenmmber als dllimport-Funktionen zu definieren

Dieser Artikel hilft Ihnen, den C2491-Compilerfehler zu beheben, der auftritt, wenn Sie versuchen, Datenmmber als dllimport Funktionen zu definieren.

Originalproduktversion: Visual C++
Ursprüngliche KB-Nummer: 815647

Symptom

Sie können das __declspec(dllimport) Schlüsselwort nicht anwenden, um eine Funktion zu implementieren. Wenn Sie beispielsweise versuchen, Datenmber (einschließlich statischer Datenmmber und Funktionen) als dllimport Funktionen zu definieren, erhalten Sie die folgende C2491-Fehlermeldung des Compilers:

'Bezeichner': Definition von Dllimport-Funktion nicht zulässig

Ursache und Auflösung

Sie können das __declspec(dllimport) Schlüsselwort nur auf Deklarationen anwenden. Sie können das __declspec(dllimport) Schlüsselwort nicht anwenden, um Funktionen zu implementieren. Der Zweck dieses Schlüsselworts besteht darin, die Implementierung einer Funktion durch eine DLL zu deklarieren. Ebenso erhalten Sie, wenn Sie das __declspec(dllimport) Schlüsselwort auf ein Datenmememm anwenden, die anfänglichen Daten aus einer DLL. Daher können Sie zunächst keinen Wert in Ihrem Code zuweisen.

Sie erhalten den Compiler C2491-Fehler, wenn Sie versuchen, den folgenden Code zu kompilieren:

// function definition
void __declspec(dllimport) funcB() 
{
    // error C2491: 'funcB' : definition of dllimport function not allowed
}

Dieses Verhalten tritt auf, da Sie die Funktionsimplementierung als dllimport. Um diesen Compilerfehler zu vermeiden, definieren Sie die Funktion nicht, sondern deklarieren Sie die Funktion wie folgt:

// function declaration
void __declspec(dllimport) funcB(); // ok
int main()
{
}

Ebenso erhalten Sie den Compiler C2491-Fehler, wenn Sie versuchen, den folgenden Code zu kompilieren:

//defining data member
extern __declspec(dllimport) int code = 1;
// error C2491: 'code' : definition of dllimport data not allowed

Diese Fehlermeldung wird angezeigt, da Sie das Datenmemmemm definiert haben.dllimport Um diesen Compilerfehler zu vermeiden, definieren Sie das Datenelement nicht, sondern deklarieren Sie stattdessen das Datenelement wie folgt:

// declaring data member
extern __declspec(dllimport) int code; // ok