0

我试图弄清楚如何在单个解决方案的旗帜下处理多个项目,以及如何正确链接项目以使事情协同工作。

我首先在一个解决方案中创建了两个项目——为简单起见,ProjA 和 ProjB。ProjB 设置为启动项目。此外,ProjA 被配置为构建为 .dll 文件,我将与 ProjB 链接,而 ProjB 又被配置为构建为 .exe 文件。到目前为止,我已经通过引用(RMB>Add>Reference)将依赖项添加到 ProjB,从而将 ProjA 链接到 ProjB。

完成所有这些后,我想测试设置是否按预期工作。所以我做了以下。在 ProjA 中,我编写了以下测试代码:

测试.h

#pragma once

namespace ProjA {

    _declspec(dllexport) void Print();
}

测试.cpp

#include "Test.h"
#include <stdio.h>

namespace ProjA {

    void Print()
    {
        printf("Testing\n");
    }
}

在 ProjB 中:

测试入口.cpp

#include <stdio.h>

namespace ProjA {

    _declspec(dllimport) void Print();
}

void main()
{
    ProjA::Print(); //breakpoint1
    printf("Testing (2)\n"); //breakpoint2
}

我在注释行设置了两个断点进行调试,构建项目并运行程序。在断点 1,我希望控制台打印“测试”并继续下一行,然后断点 2 打印“测试(2)”并在退出前继续下一行。但是,控制台在断点 1 处是空白的。它仅在断点 2 处打印主函数中的行。

那么我在这里做错了什么?我包含项目的方式有问题吗?我跳过了链接过程吗?我需要设置 Visual Studios 2017 以使其工作的特定方式吗?我应该安装其他插件/API吗?

为了进一步测试它,我注释掉了 ProjA 中的所有内容。这次我预计在构建项目时会出现链接错误,但一切都以完全相同的方式运行。这让我更加困惑。好像我什至没有链接项目,主要功能不是通过包含识别测试代码。到目前为止,这是我唯一能推断出来的。

4

1 回答 1

0

正如 SoronelHaetir 所建议的,我使用#defines 和命名空间重做了整个事情。它现在按预期工作。总之,粗略的方法从一开始就是一个坏主意。

于 2020-03-26T11:13:47.400 回答