为了获得易于维护的模块化代码,我将以前的 VC++ 解决方案中的代码拆分到单独的其他项目中。那就是我可以维护单独的代码库,同时仍然能够在解决方案中包含工作代码。我的解决方案资源管理器如下所示:
我已经按照 this (Project config/VC++/Extra Include paths) SO 回答这里,以允许 fodHelperBypass.cpp
访问 registry.cpp
中的方法。 VS 允许我导入 RegistryTools 项目的头文件:
事实上,如果我 Ctrl + click
registry.h
导入声明 VS 将打开头文件,我可以确认它是从正确的位置加载的。 registry.cpp
文件位于同一目录中。
我还可以确认,在项目构建设置中,两个项目都设置为 x64 构建配置(在较早的时候情况并非如此,VS 无法定位 registry.h
,因为设置了 RegistryTools 构建配置到 x86)。 VS 还能识别 fodHelper.cpp
文件中的外部函数,并且不会给出任何未定义的错误。
然而,在尝试构建项目时,我收到了 LNK2019
和随后的 registry.h
中声明的每个方法的 registry.cpp
错误。
我已阅读 this SO post,但我认为这不适用,因为我没有声明任何类。此外,当我简单地将 registry.h
和 registry.cpp
复制并粘贴到解决方案目录中,并将它们添加到解决方案中时,代码构建没有错误。
有人可以解释一下我做错了什么导致链接器出现此错误吗?
编辑
我已将本解决方案中涉及的两个子项目编译为 .lib
文件,这已达到预期效果。虽然我仍然很困惑,但我必须这样做才能使用另一个 C++ 项目中的方法吗?引用的函数必须是静态库的一部分吗?
从阅读第一个链接开始,我的印象是我所要做的就是在项目配置中添加包含目录,然后我就可以使用 RegistryTools 中的方法。
RegistryTools 是一个项目,它包含一个带有四个函数的 cpp 文件,以及一个声明它们的头文件。
答案 0 :(得分:0)