我试图弄清楚如何在单个解决方案的旗帜下处理多个项目,以及如何正确链接项目以使事情协同工作。
我首先在一个解决方案中创建了两个项目——为简单起见,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 中的所有内容。这次我预计在构建项目时会出现链接错误,但一切都以完全相同的方式运行。这让我更加困惑。好像我什至没有链接项目,主要功能不是通过包含识别测试代码。到目前为止,这是我唯一能推断出来的。