【问题标题】:What causes Win32exception "The specified procedure could not be found"?Win32异常“找不到指定的程序”是什么原因?
【发布时间】:2013-04-23 19:43:23
【问题描述】:

这个异常究竟是什么意思,为什么会发生?

更多信息:

这就是它发生的地方:

Id = GlobalAddAtom("aString");

if (Marshal.GetLastWin32Error() != 0)
{ throw new Win32Exception(); }

我知道 GlobalAddAtom 确实在 kernel32.dll 中(这是我从中导入 DllImporting 的地方)。

【问题讨论】:

  • 但这到底意味着什么?如果我 DllImport 并从 kernel32.dll 调用 NonExistantFunction(),那么我会得到一个完全不同的异常:“无法在 DLL 'kernel32.dll'中找到名为'NonExistantFunction'的入口点。”。这意味着 GlobalAddAtom() 确实在 kernel32.dll 中。所以它在“模块”中,对吗?

标签: .net wpf winapi unmanaged win32exception


【解决方案1】:

GetLastError 返回任何 API 函数触发的最后一个错误。

检查返回的 Id 值是否为零 - 只有在这种情况下 GlobalAddAtom 才会失败。

【讨论】:

  • 谢谢,虽然对我没有帮助。我已经知道它是一个 Win32Exception,这意味着它来自 Win32 函数调用。只是不明白为什么会这样。特别是因为 GlobalAddAtom() 返回一个负值(不是零),这意味着它没有失败。
  • 好的,您的回答并不完全明确,但您是对的。 Win32Exception 在我调用 GlobalAddAtom() 之前就已经存在。似乎它甚至在我的程序开始时就在那里。要做的就是检查GlobalAddAtom()的返回值,只有失败了才可以使用GetLastWin32Error()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 2011-01-20
  • 1970-01-01
  • 2012-09-09
相关资源
最近更新 更多