我是一个菜鸟,我正在通过微软官方指导学习如何在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”就可以工作?
来自文档:使用 __declspec(dllimport) 导入到应用程序中
在函数声明中使用 __declspec(dllimport) 是可选的,但如果使用此关键字,编译器会生成更高效的代码。但是,您必须使用 __declspec(dllimport) 作为导入可执行文件才能访问 DLL 的公共数据符号和对象。请注意,DLL 的用户仍然需要链接导入库。