C++ 20 中的“__declspec”错误

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

好吧。让我描述一下我的问题。所以,有这个宏:

#ifdef DLL_MODE
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

这堂课:

class DLL_API Test
{

public:

    void print();
};

这是实现,它位于静态库中。

#include "../LibTest/Test.hpp"

void Test::print()
{
    std::cout << "Hello, World!" << std::endl;
}

看起来很简单吧?好吧,没那么多......所以,我的主要问题是编译时,我收到链接器错误:

error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __cdecl Test::print(void)" (__imp_?print@Test@@QEAAXXZ) referenced in function main

但是,如果我从“测试”类中删除“DLL_API”,那么错误就会消失。但是,我首先需要“DLL_API”,因为我需要加载一些需要“DLL_API”宏的 DLL 操作。此外,“DLL_MODE”是在构建静态库时定义的。

我尝试过切换宏、询问 ChatGPT、谷歌搜索,但没有任何效果。

c++ c++20 visual-studio-2022 linker-errors dllexport
1个回答
0
投票

在 Visual Studio 中,__declspec(dllimport) 对于 DLL 中的函数是可选的。 所以你可以使用

#ifdef DLL_MODE
#define DLL_API __declspec(dllexport)
#else
#define DLL_API 
#endif
© www.soinside.com 2019 - 2024. All rights reserved.