當您嘗試將資料成員定義為 dllimport 函數時,編譯器 C2491 錯誤

本文可協助您解決當您嘗試將資料成員定義為函數時,所發生的編譯器 C2491 錯誤 dllimport

原始產品版本:  Visual c + +
原始 KB 編號:  815647

問題

您無法套用 __declspec(dllimport) 關鍵字以實現函數。 例如,當您嘗試將資料成員(包括靜態資料成員和函數)定義為 dllimport 函數時,會收到下列編譯器 C2491 錯誤訊息:

' 識別碼 ':不允許 dllimport 函數的定義

原因和解決方法

您只可以將 __declspec(dllimport) 關鍵字套用至宣告。 您無法套用 __declspec(dllimport) 關鍵字以執行函數。 此關鍵字的目的是用 DLL 宣告函數的實現。 同樣地,如果您將 __declspec(dllimport) 關鍵字套用至資料成員,您會收到來自 DLL 的初始資料。 因此,您最初無法在程式碼中指派值。

當您嘗試編譯下列程式碼時,會收到編譯器 C2491 錯誤:

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

發生此行為是因為您將函數實現定義為 dllimport 。 若要避免此編譯器錯誤,請勿定義函數,而是以下列方式宣告函數:

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

同樣地,當您嘗試編譯下列程式碼時,您會收到編譯器 C2491 錯誤:

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

您會收到此錯誤訊息,因為您已將資料成員定義為 dllimport 。 若要避免此編譯器錯誤,請勿定義資料成員,而是宣告資料成員,如下所示:

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