【问题标题】:LoadLibrary() error code 998LoadLibrary() 错误代码 998
【发布时间】:2016-01-05 09:06:37
【问题描述】:

我有一个用 Visual Studio 2012 编写的 c++ dll。我想使用 LoadLibrary 函数将它加载到 C# 程序(VS2012)中。
我设置了SetLastError = true 以获取LoadLibrary 的概率返回错误代码。当我运行我的 C# 程序时,我总是收到 998 错误代码,但我不明白它有什么问题!
请问您能帮我解决这个问题吗?
任何帮助,将不胜感激。

(应该提一下,我看到一些关于错误代码998的帖子,但没有一个不能给我解决方案。)

【问题讨论】:

  • 注意这些帖子可能会有所帮助,以防您错过了其他人可能会看到的内容。
  • 令人讨厌的是,DLL 的 DllMain() 入口点因 AccessViolationException 而失败。关于可能出错的最糟糕的事情。这不是您可以自己解决的问题,也不是请SO用户为您解决的,您必须使用电话向作者或所有者寻求帮助。
  • @HansPassant 由于DLL开发者的说法,她使用:extern "C" { __declspec(dllexport) int __stdcall Start(int ID) { //body } }导出Start(int ID)方法,DllMain没有被使用。
  • 我很抱歉@PhilCooper,但我的英语很差,我听不懂你的意思!是否可以更容易地告诉我你的意思是什么?!
  • @HansPassant 如果我的帖子是平庸的,我想道歉,如果你能帮助我解决这个问题,我将不胜感激。

标签: c# visual-studio-2012 visual-c++ loadlibrary


【解决方案1】:

针对此评论“请告诉我如何执行此指令”:

要解决 LoadLibrary() 故障,请在 调试器并为 C0000005 启用第一次机会异常处理 访问冲突异常。如果访问冲突发生时 LoadLibrary() 函数被调用,应用程序将进入 调试器。然后可以使用调试器的调用堆栈来跟踪 发生异常。堆栈跟踪应该可以帮助您缩小范围 与遇到的异常相关的实际问题。

  1. 在 Visual Studio 中打开您的项目

  2. 在菜单中,点击Debug > Exceptions

  3. Exceptions窗口中,点击Find...并输入C0000005点击Ok

  4. 选中Thrown 列下突出显示的异常旁边的框。

现在,当您调试程序并引发异常时,它会中断,您至少应该能够检查所引发异常的异常详细信息。

您可能会被扔进反汇编窗口,因此您可能看不到任何可读代码。如果异常详细信息不够,您可以尝试使用Dot Peek 进行反编译。

这是tutorial on enabling Dot Peek as a symbol server。这样做有望即时反编译库,以便您可以开始检查导致异常的代码行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多