c++ - 在 Visual Studio 2005 中重用对象文件

标签 c++ visual-studio-2005 visual-c++-2005

情况如下:

我有一个 VS2005 解决方案,其中包含两个项目:MyDll (DLL)、MyDllUnitTest(控制台 EXE)。

在 MyDll 中,我有一个名为 MyClass 的类,该类位于 DLL 内部,不应导出。我想在 MyDllUnitTest 中测试它,因此我添加了一个名为 MyClassTest 的测试套件类,我在其中创建 MyClass 的实例并测试它们。

我的问题:如何将通过构建 MyDll 创建的 MyClass 的目标文件链接到 MyDllUnitTest EXE?我不想在 MyDllUnitTest 中构建 MyClass,也不想导出该类。

我尝试对两个项目使用相同的中间目录(因此目标文件位于同一目录中)并使用VS2005的引用功能(右键单击项目 ->引用 ->添加新的引用...),但它不起作用 - 我仍然收到链接错误(LNK2001)。

编辑:我不想在两个项目中拥有相同的源文件 - 考虑一下我有很多 MyClass/MyClassTest,这意味着我必须将每个 MyClass 复制到不同的项目。 我知道可以在两个项目中使用相同的目标文件,我以前见过它,但忘记了如何实现。

编辑:我决定将文件放入两个项目中,因此它们会被编译两次。事实证明,“引用”功能会自动工作 - 但仅适用于静态库项目。

最佳答案

我不明白为什么你不想在你的 dll 项目中构建它。只要两个项目使用相同的源文件,它们都会生成相同的目标文件(假设编译器选项设置相同)。

如果您想在不导出类本身的情况下测试 dll(我认为这是因为导出 dll 中的类通常是一个坏主意),请考虑从 dll 导出“工厂”函数。它的签名如下:

extern "C" MyClass *CreateMyClass();

该函数将创建 MyClass 的对象并返回指向它的指针。然后,您的单元测试可以对返回的类对象执行所需的任何操作。

关于c++ - 在 Visual Studio 2005 中重用对象文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/261518/

相关文章:

c++ - 内联非成员函数内的本地类使用 MSVC2005 生成 LNK2005

c++ - Opencv 行方法有一个奇怪的行为

c++ - 构造函数的快捷方式

c++ - 如何移动给定数字索引左侧的数组(或 c 字符串)元素

c# - 属性大括号的换行符选项(C# VS 2005)

c++ - Visual C++ 2005 探查器

c++ - 由于交叉编译树莓派,未定义对 'vtable for Adafruit_GFX' 的引用

c++ - 列表迭代器不可取消引用?

c++ - 为什么包含 windows.h 时 std::min 失败?

c++ - 你能让 Visual Studio 2005 为你的启动程序提供命令行参数吗?