Compiler C2491-Fehler beim Versuch, Datenmember als dllimport-Funktionen zu definieren
Dieser Artikel hilft Ihnen, den C2491-Compilerfehler zu beheben, der auftritt, wenn Sie versuchen, Datenmember als dllimport Funktionen zu definieren.
Originalversion des Produkts: Visual C++
Ursprüngliche KB-Nummer: 815647
Problembeschreibung
Sie können das __declspec(dllimport) Schlüsselwort nicht anwenden, um eine Funktion zu implementieren. Wenn Sie beispielsweise versuchen, Datenmember (einschließlich statischer Datenelemente und Funktionen) als dllimport Funktionen zu definieren, erhalten Sie die folgende C2491-Compilerfehlermeldung:
'Identifier' : Definition der dllimport-Funktion nicht zulässig
Ursache und Lösung
Sie können das __declspec(dllimport) Schlüsselwort nur auf Deklarationen anwenden. Sie können das __declspec(dllimport) Schlüsselwort nicht zum Implementieren von Funktionen anwenden. 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 Datenelement anwenden, die ersten Daten von einer DLL. Daher können Sie im Code zunächst keinen Wert zuweisen.
Sie erhalten den C2491-Compilerfehler, 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, weil Sie die Funktionsimplementierung als dllimportdefiniert haben. 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 C2491-Compilerfehler, 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, weil Sie das Datenelement als dllimportdefiniert haben. Um diesen Compilerfehler zu vermeiden, definieren Sie nicht das Datenelement, sondern deklarieren Sie das Datenelement wie folgt:
// declaring data member
extern __declspec(dllimport) int code; // ok