c - __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);
解决方案
推荐阅读
- sql - SQL从另一个数据库表中复制数据,在目标上具有指定的列格式
- python - Pandas GroupBy 对象:它是什么?
- ios - 逻辑问题:如何让单元格图像在用户平移一次后继续翻转?
- ios - 在 xamarin 表单中,ios Launchscreen 和 App 图标没有改变
- c# - 使用 Linq 按名称频率对列表进行排序
- pandas - pandas groupby 和 nan
- bash - 将两个不同文件夹中具有相同条形码的fastq文件合并到另一个文件夹
- c# - 使用未分配的局部变量“KubeClient”
- sql - sql查询中的多个count语句
- azure - ServiceFabric - ApplicationManifest.xml - RepositoryCredentials 以使用 ACR 服务连接