dllexport和dllimport有什么区别?
时间:2020-03-05 18:51:57 来源:igfitidea点击:
我只是在寻找关于这两者之间区别的简单明了的解释。 MSDN在这里不会涉及很多细节。
解决方案
回答
- __declspec(dllexport)告诉链接器,我们希望此对象可用于其他DLL的导入。在创建其他人可以链接到的DLL时使用它。
- __declspec(dllimport)从DLL导入实现,以便应用程序可以使用它。
我只是C / C ++新手开发人员,所以也许有人比我有更好的解释。
回答
两种不同的用例:
1)我们正在dll中定义一个类实现。我们希望另一个程序使用该类。在这里,我们在创建希望dll公开的类时使用dllexport。
2)我们正在使用dll提供的功能。我们包括dll附带的标头。在这里,头文件使用dllimport引入要由当前程序使用的实现。
通常在两种情况下都使用相同的头文件,并定义了一个宏。构建配置根据需要定义要导入或者导出的宏。
回答
Dllexport用于将功能标记为已导出。我们可以在DLL中实现该功能并将其导出,以便使用DLL的任何人都可以使用。
Dllimport是相反的:它将功能标记为从DLL导入。在这种情况下,我们仅声明函数的签名并将代码与库链接。
回答
__declspec(dllexport)
如此标记的类或者函数将从其内置的DLL中导出。如果要构建DLL并且需要API,则需要使用此或者单独的.DEF文件定义出口(MSDN)。这很方便,因为它将定义保留在一个位置,但是.DEF文件提供了更多选项。
__declspec(dllimport)
如此标记的类或者函数将从DLL中导入。实际上,这实际上不是必需的,我们仍然需要一个导入库来使链接器满意。但是,如果正确标记了" dllimport",则编译器和链接器将具有足够的信息来优化调用。没有它,我们将获得到导入库中存根函数的正常静态链接,这会添加不必要的间接访问。 ONT1 ONT2