本文可帮助你解决尝试将数据成员定义为 dllimport 函数时出现的编译器 C2491 错误。
原始产品版本: Visual C++
原始 KB 数: 815647
症状
不能应用 __declspec(dllimport) 关键字来实现函数。 例如,尝试将数据成员(包括静态数据成员和函数)定义为 dllimport 函数时,会收到以下编译器 C2491 错误消息:
“identifier”:不允许使用 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