【问题标题】:LoadLibrary return 193 on newest version of Visual C++ on x64LoadLibrary 在 x64 上最新版本的 Visual C++ 上返回 193
【发布时间】:2015-10-17 07:56:05
【问题描述】:

LoadLibrary(加载 dll 库)有问题,从 Visual C++ 2008 迁移到 Visual C++ 2012 后出现问题。

当我尝试在我的 dll 上使用 LoadLibrary 时出现错误(GetLastError 返回 193),这很奇怪,因为在旧视觉中,同一个 dll 没有问题(两个视觉上都设置了 x64)。

【问题讨论】:

  • VIsual C++ 2012 不是最新版本; 2013 年直到一周前,2015 年才发布。所以2012实际上落后了两个版本。
  • 我错了我有2013,所以我落后了一个版本。
  • 这是一个非常简单的错误,不要再假设它与 VS 版本有关。当它是 another DLL 时,它会变得不那么简单,并且您正在加载的 DLL 依赖于错误的位数。否则基本 DLL 地狱。不要使用 Depends,它会产生太多错误警告。使用 SysInternals 的进程监视器,你会看到你的程序加载 DLL 并搜索依赖的 DLL,找到错误的。

标签: c++ visual-studio visual-studio-2012 dll


【解决方案1】:

193 是ERROR_BAD_EXE_FORMAT,这意味着您尝试加载的 DLL 或其依赖项之一不是有效的可执行文件,也可能不是 32 位可执行文件。因此,您的构建中可能存在一些错误配置。

您可以使用Dependency Viewer 之类的工具来检查可执行文件以查看它们是否匹配。

编辑:这是 14001 的描述:

//

// MessageId: ERROR_SXS_CANT_GEN_ACTCTX
//
// MessageText:
//
// The application has failed to start because its side-by-side
// configuration is incorrect. Please see the application event
// log or use the command-line sxstrace.exe tool for more detail.
//
#define ERROR_SXS_CANT_GEN_ACTCTX        14001L

所以这肯定是一个 DLL 依赖问题。

【讨论】:

  • 好的,但是当我在 Visual 2013 LoadLibrary 中构建 dll 时,我尝试在新版本的 Visual (2013) 中加载基于旧版本 Visual (2008) 构建的 dll,并且 LoadLibrary 返回 193返回14001。使用依赖walker后,打开文件出错API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL API-MS-WIN-CORE-PRIVATEPROFILE-L1-1-1.DLL API -MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL 但在旧 dll 中存在同样的问题,并且 dll 在旧版本上正确加载。
猜你喜欢
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多