【问题标题】:LoadLibrary 998 error加载库 998 错误
【发布时间】:2012-07-12 09:56:34
【问题描述】:

我有一个 .NET C# 控制台应用程序,它在运行时加载多个 Win32 DLL-s。当这个应用程序在我的开发人员机器上运行时(我的笔记本电脑上是 32 位 Win7,我的台式机上是 64 位 Win7),有时它会导致 998 错误。重新启动开发人员机器后,此问题消失。这发生在测试服务器(Linux 上的虚拟机,Win Server 2008 R2)上,但重新启动后它也消失了。因此不容易复制。

很难理解原因,当我在DLL-s加载dependecy walker时,它显示它们绝对没有问题,这两个依赖是Kernel32.DLL和MSVCRT.DLL。今天这个错误发生在从命令行启动我的应用程序。我将应用程序加载到VS2010中,然后启动,加载相同的dll-s没有任何问题。停止它,我再次从命令行启动了我的应用程序,它也加载了 DLL-s。

这些 DLL-s 不是我开发的,而是第三家公司开发的,所以我看不到 DLL-s 的源代码。知道发生了什么吗?

【问题讨论】:

  • 看看这个,可能会有所帮助 - support.microsoft.com/kb/196069
  • 错误 998 (0x3e6) 在 winerror.h 中定义为 ERROR_NOACCESSInvalid access to memory location。快速搜索MSDN 表明这是由LoadLibrary 尝试加载DLL 时的访问冲突引起的。那里有几篇知识库文章可能会有所帮助。
  • 您能想象有时会发生有时不会发生的“无效访问内存”吗?
  • @ZoltanHernyak:我很容易想象。由于无数的原因,它一直在发生。我的意思不是没有帮助,但我们只是没有足够的信息来开始猜测原因。 \
  • 我询问了第 3 方开发人员,他们说 DllMain 包含一个没有主体的开关,以及一个“返回真”; (标准 DllMain 模板)。

标签: c# winapi error-handling loadlibrary


【解决方案1】:

将您的 dll 设置在您的应用所在的同一文件夹中。 您的应用程序必须以管理员访问权限运行。 只需以管理员身份运行 VS 或以管理员身份运行 cmd,然后将 cmd 路径更改为您的应用程序位置,如本例所示

c:\cd /d your_application_path

然后在命令提示符中输入您的应用程序的名称。那么您的应用程序可以拥有管理员令牌来成功执行工作。

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    相关资源
    最近更新 更多