c++ - Visual Studio 2008 C++。引用 DLL 项目时出现问题

标签 c++ visual-studio-2008 dll reference

我有一个包含两个项目的解决方案:一个是带有简单类 (dll_test) 的简单 dll。第二个工程引用了dll工程,应该是用来测试dll工程的(dll_tester)。 dll 项目构建良好,但测试项目总是提示无法找到 dll_test.lib 而不是 dll_test.dll,就像它应该的那样。

同样,这是在 Windows 7 计算机上使用 Visual Studio 2008。我不认为这有什么不同,但我从 dll_test 项目开始解决方案,后来添加了 dll_tester 项目。

有人知道怎么解决吗?

最佳答案

啊,Visual Studio 中 DLL 和依赖项的乐趣。我发誓,C# 编码员很容易:)

您确定确实创建了 LIB 文件吗?如果您的 DLL 项目不导出任何符号,您将不会获得 lib 文件,因此您将没有任何可链接的内容。因此,您需要确保:

  1. 您的 DLL 项目定义了类似于 MYPROJECTNAME_EXPORTS 的内容。当您在创建项目时选中相应的框时,Visual Studio 会为您定义此符号。如果你没有这样做,那就很简单了。确保上述符号位于 DLL 的预处理器指令中,并确保在公共(public)头文件中定义了以下内容:

    #if defined(MYPROJECTNAME_EXPORTS)
    #define MYPROJECT_API __declspec(dllexport)
    #else
    #define MYPROJECT_API __declspec(dllimport)
    #endif
    
  2. 一旦我们知道 MYPROJECT_API 已正确定义,我们需要确保我们希望导出的任何类或函数在其声明中都有:

    class MYPROJECT_API SomeClass
    {
    }; // eo class SomeClass
    

并且该类需要被实现并且实际上编译器没有优化掉的事情。

简而言之,您找不到 .lib 文件的原因是没有生成任何文件,因为没有从中导出符号。

关于c++ - Visual Studio 2008 C++。引用 DLL 项目时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4921683/

相关文章:

c++ - 如何检查字符串输入是否为有效的 double 值?

c# - Treeview 控件 - ContextSwitchDeadlock 解决方法

docker - 我可以在可从外部Docker链接到的Docker容器中构建动态库吗?

c# - 在加载应用程序目录之外的目录中加载依赖于其他程序集的程序集?

c++ - 显式链接的 DLL 中的 CDecl 清理代码

c++ - 在 const char* [][3] 和 std::array< const char*, 3 >* 之间转换

c++ - 在 C++ 中合并两个库

c++ - 在多个模块中共享的 constexpr 函数

c# - 从SQL Server数据库表中检索最后一个ID

c++ - VS Express Edition 2008 中的 fatal error LNK2001 和 LNK1120