定义和声明(C++)
Microsoft 专用
DLL 接口引用已知由此在系统的某些程序导出的所有项目 (函数和数据);即声明为 dllimport 或 dllexport的所有项。在 DLL 接口中的所有声明必须指定 dllimport 或 dllexport 属性。但是,定义必须指定仅 dllexport 属性。例如,以下函数定义生成编译器错误:
__declspec( dllimport ) int func() { // Error; dllimport
// prohibited on definition.
return 1;
}
此代码还将生成错误:
#define DllImport __declspec( dllimport )
__declspec( dllimport ) int i = 10; // Error; this is a
// definition.
但是,这是正确的语法:
__declspec( dllexport ) int i = 10; // Okay--export definition
,而 dllimport 表示一个声明中,使用 dllexport 表示一个定义。您必须使用 dllexport 的 extern 关键字强制说明;否则,定义提示。因此,下面的示例是正确的:
#define DllImport __declspec( dllimport )
#define DllExport __declspec( dllexport )
extern DllImport int k; // These are both correct and imply a
DllImport int j; // declaration.
下面的示例说明了前面:
static __declspec( dllimport ) int l; // Error; not declared extern.
void func() {
static __declspec( dllimport ) int s; // Error; not declared
// extern.
__declspec( dllimport ) int m; // Okay; this is a
// declaration.
__declspec( dllexport ) int n; // Error; implies external
// definition in local scope.
extern __declspec( dllimport ) int i; // Okay; this is a
// declaration.
extern __declspec( dllexport ) int k; // Okay; extern implies
// declaration.
__declspec( dllexport ) int x = 5; // Error; implies external
// definition in local scope.
}