1

我有一个旧项目需要重新审视。它是在查看 .sln 文件的某些版本的 Visual C++(prolly 2005)中构建的。由于某些损坏(重复错误点 -1),sln 文件不会转换为 VS 2008 解决方案。我将VS中的文件夹作为新项目导入并尝试编译。

"lang/Typedefs.h/Assertions.h"它给出了不存在的编译错误。删除声明我对未声明的 Uint8/16/32/64 有错误。所以我添加了 typedefs 和其他宏(TOOLS_UNUSED_PARAMETERS(x) / TOOLS_FORBID_COPY())

解决这个问题后,我得到了 Gui/FileDlg.h 和 Gui/FolderDlg.h 的错误(调试点 - 2)。

我没有从任何在线资源或我当前的 VS 安装中找到任何这些头文件,所以我假设代码丢失了,我将不得不重做它。

甚至这些也可能是早期程序员自定义实现的。当前 MFC 使用CFileDialog和代码使用 Gui::FileDlg.

我暂时注释掉了代码,看看我可以去哪里,因为 gui 不是应用程序的那么大的一部分。后来我看到与 RegKeyOpenEx 调用和输出流调用相对应的链接器错误(重复错误点 -3)。Winreg.h 不包括在内,但 windows.h 包括在内。

样本 :

Error   2   error LNK2019: unresolved external symbol __imp__MessageBoxA@16 
referenced in function "public: class std::basic_ostream<char,struct 
std::char_traits<char> > * __thiscall FileManager::getOutputStream(class Interface   
*,class LogPoint *)" (?getOutputStream@FileManager@@QAEPAV?$basic_ostream@DU?
$char_traits@D@std@@@std@@PAVInterface@@PAVLogPoint@@@Z)    filemanager.obj 
PCAPGenerator

我不是 .Net 程序员,所以你能建议这里的正确做法吗?我应该关注哪些调试点。

4

1 回答 1

1

RegKeyOpenEx是一个 Winapi 函数,定义在Advapi32.dll. 要将其链接到 Visual C++ 项目:

  • 如果您的项目是静态库(右键单击 project-> Properties->Configuration Properties->Configuration Type->Static Library (.lib),转到Configuration Properties->Librarian->General->Additional Dependencies并添加Advapi32.lib.
  • 如果您的项目是 dll (相同的地方,Dynamic Library (.dll)而不是说),您将拥有该Linker部分而不是Librarian. 转到其Input子部分,然后添加Advapi32.libAdditional Dependencies.

对于剩余的链接器错误,请以相同的方式继续:转到该函数的 MSDN 文档,检查它属于哪个 dll/lib,并让您的项目将其链接到如上所述。

于 2013-04-04T19:12:52.173 回答