对使用 c++ 构建和使用 dll 感到困惑

问题描述 投票:0回答:1

背景

我是一个菜鸟,我正在通过微软官方指导学习如何在c++中构建和使用dll。 https://learn.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=msvc-170

我发现它使用头文件检查是否存在某些宏(MATHLIBRARY_EXPORTS)来获取两个版本的MATHLIBRARY_API宏定义。然后在 DLL 构建项目和客户端项目中使用此头文件。

我不知道宏(MATHLIBRARY_EXPORTS)定义在哪里,我想尝试构建一个DLL,只需使用“__declspec(dllexport)”,所以我在Visual Studio中创建两个项目来测试。

问题

在构建dll的项目中,我仅在头文件中的函数声明之前使用“dllexport”并成功构建了dll。让我困惑的是,当我在客户端项目中包含此标头并给出正确的结果(在控制台中打印“hello world”)时,它可以工作。 这是正常的吗?为什么我不需要将函数声明为“dllimport”就可以工作?header fileclient projectresult

c++ c visual-studio dll
1个回答
0
投票

来自文档:使用 __declspec(dllimport) 导入到应用程序中

在函数声明中使用 __declspec(dllimport) 是可选的,但如果使用此关键字,编译器会生成更高效的代码。但是,您必须使用 __declspec(dllimport) 作为导入可执行文件才能访问 DLL 的公共数据符号和对象。请注意,DLL 的用户仍然需要链接导入库。

© www.soinside.com 2019 - 2024. All rights reserved.