首页 > 解决方案 > __declspec(dllexport) 导入时。好像没什么区别?

问题描述

首先让我说,我知道__declspec(dllexport)关键字的目的是什么。但是为了它而进行试验,当使用这个关键字导入函数与不使用该关键字时,我看不到生成的 EXE 的导入/导出表有任何区别。

为了说明,我有一个 DLL 项目,其中包含一个带有以下声明的头文件:

__declspec(dllexport) int somefunc(int, int)

然后是另一个从 DLL 构建 EXE 导入函数的项目:

#include "path_to_header_file_of_dll"
int main() {
    somefunc();
}

当我构建这个 EXE 时,它似乎编译和构建很好,即使我已经将函数声明为导出该符号,但它显然没有导出它,只是导入它。为什么编译器不抱怨?此外,这不会导致生成的 EXE 具有导出表。而是建立一个导入表。编译器似乎已经找到了正确的做法并做到了。

如果这行得通,那么为什么要使用下面这样的代码:

#ifdef BLEH
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif

DLLEXPORT int somefunc(int, int);

标签: cvisual-studiovisual-c++dllimportdllexport

解决方案


推荐阅读