【问题标题】:CreateFile Returns negative handleCreateFile 返回负句柄
【发布时间】:2011-12-20 09:01:30
【问题描述】:

为什么 createfile() 函数会返回 -1。

Handle = CreateFile(filename, &H80000000, 0, 0, 3, &H80, 0)

这运行了几次。我在想也许文件没有正确关闭?

编辑

Err.LastllError 返回 32。

【问题讨论】:

  • GetLastError() 返回什么?
  • 用 MSDN 团队的话来说:If the function fails, the return value is INVALID_HANDLE_VALUE (-1). To get extended error information, call GetLastError.
  • 抱歉,对于 VB6 中的GetLastError,您应该使用Err.LastDLLError,因为它可能会被以后的调用覆盖。

标签: vb6 filehandle createfile window-handles


【解决方案1】:

您可能没有在某个地方关闭文件是对的。我会首先查看我在哪里打开文件并确保我有一个错误处理例程。在错误处理程序中,我会检查“Handle”的值,如果它有效,请调用 CloseHandle(Handle)。此外,由于您正在打开文件进行读取访问,您可以将 dwShareMode 参数更改为 1 以允许后续打开同一文件进行读取操作。

【讨论】:

  • +1 清理错误的更复杂的方法可能是:创建一个类来包装句柄对象。在调用 CreateFile 的类上有一个方法。在 Class_Terminate 检查句柄并调用 CloseHandle。使用局部变量来保存该对象的实例。每当局部变量超出范围时,VB6 运行时都会确保 Class_terminate 事件运行。
【解决方案2】:

错误 32 是 ERROR_SHARING_VIOLATION (reference),这意味着其他进程仍然打开文件。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
相关资源
最近更新 更多