旧.net项目中未解决的外部项

unresolved externals in old .net project

本文关键字:外部 未解决 net 项目      更新时间:2023-10-16

我现在有一个旧项目要负责。它包括两个dll-s和一个在.net 2003 C++上编写的ocx,它们可以在彼此和更大的应用程序之间进行通信。我需要对它们进行更改,但当我尝试构建ocx时,我得到了8个LNK2019未解决的外部错误,我不知道如何修复这些错误。当我构建整个解决方案时,其中一个dll-s也有这些LNK2019错误,但它仍然生成.dll。据我所知,自上一次上一个人成功构建以来,这些项目没有改变。我不认为代码或项目设置有任何问题。我使用的是带有windowsxp的oracle虚拟机,可以运行.net 2003。

错误输出:

mfcs42.lib(dllmodul.obj) : error LNK2019: unresolved external symbol "public: __thiscall AFX_MODULE_STATE::AFX_MODULE_STATE(int,long (__stdcall*)(struct HWND__ *,unsigned int,unsigned int,long),unsigned long)" (??0AFX_MODULE_STATE@@QAE@HP6GJPAUHWND__@@IIJ@ZK@Z) referenced in function "public: __thiscall _AFX_DLL_MODULE_STATE::_AFX_DLL_MODULE_STATE(void)" (??0_AFX_DLL_MODULE_STATE@@QAE@XZ)
mfcs42.lib(dllmodul.obj) : error LNK2019: unresolved external symbol "public: __thiscall AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(class AFX_MODULE_STATE *)" (??0AFX_MAINTAIN_STATE2@@QAE@PAVAFX_MODULE_STATE@@@Z) referenced in function "long __stdcall AfxWndProcDllStatic(struct HWND__ *,unsigned int,unsigned int,long)" (?AfxWndProcDllStatic@@YGJPAUHWND__@@IIJ@Z)
mfcs42.lib(oleexp.obj) : error LNK2001: unresolved external symbol "public: __thiscall AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(class AFX_MODULE_STATE *)" (??0AFX_MAINTAIN_STATE2@@QAE@PAVAFX_MODULE_STATE@@@Z)
mfcs42.lib(dllmodul.obj) : error LNK2019: unresolved external symbol "void __stdcall AfxTermExtensionModule(struct AFX_EXTENSION_MODULE &,int)" (?AfxTermExtensionModule@@YGXAAUAFX_EXTENSION_MODULE@@H@Z) referenced in function _DllMain@12
mfcs42.lib(dllmodul.obj) : error LNK2019: unresolved external symbol "class AFX_MODULE_STATE * __stdcall AfxSetModuleState(class AFX_MODULE_STATE *)" (?AfxSetModuleState@@YGPAVAFX_MODULE_STATE@@PAV1@@Z) referenced in function _DllMain@12
mfcs42.lib(dllmodul.obj) : error LNK2019: unresolved external symbol "public: __thiscall CDynLinkLibrary::CDynLinkLibrary(struct AFX_EXTENSION_MODULE &,int)" (??0CDynLinkLibrary@@QAE@AAUAFX_EXTENSION_MODULE@@H@Z) referenced in function _DllMain@12
mfcs42.lib(dllmodul.obj) : error LNK2019: unresolved external symbol "int __stdcall AfxInitExtensionModule(struct AFX_EXTENSION_MODULE &,struct HINSTANCE__ *)" (?AfxInitExtensionModule@@YGHAAUAFX_EXTENSION_MODULE@@PAUHINSTANCE__@@@Z) referenced in function _DllMain@12
mfcs42.lib(dllmodul.obj) : error LNK2019: unresolved external symbol "void __stdcall AfxCoreInitModule(void)" (?AfxCoreInitModule@@YGXXZ) referenced in function _DllMain@12
libcmt.lib(crt0.obj) : error LNK2019: unresolved external symbol _main referenced in function _mainCRTStartup
...DLLImpDplanX.ocx : fatal error LNK1120: 8 unresolved externals

我阅读了建议的解决方案,但不明白如何从列出的所有可能的解决方案中确定真正的原因。或者如何修复。

链接器错误可能有多种原因:

  1. 已更新从库中删除符号的环境
  2. 对环境的依赖性不满意,即库太旧,无法包含特定的符号
  3. 缺少定义这些符号的源文件
  4. 错误的构建环境(错误的链接器标志、搜索路径等)
  5. 构建是错误的(可能有些依赖关系没有明确到构建系统,需要通过按特定顺序构建某些子项目来手动保留)

如果没有进一步的信息,几乎不可能说出问题所在。