c# - CreateFile 的端口 INVALID_HANDLE_VALUE

标签 c#

所以我将这些东西从 C++ 移植到 C#。它的一部分看起来像这样:

      m_hParstat = CreateFile( _T("\\\\.\\LPTSTAT1"), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );

  if( m_hParstat == INVALID_HANDLE_VALUE )
  {
     // do some stuff
  }

所以在我的 C# 代码中我有

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess,
                     uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition,
                     uint dwFlagsAndAttributes, IntPtr hTemplateFile);

public const int FILE_ATTRIBUTE_NORMAL = 0x00000080;
public const uint GENERIC_READ = 0x80000000;
public const uint OPEN_EXISTING = 3;
public const UInt32 INVALID_HANDLE_VALUE = 0xffffffff;

然后

  m_hParstat = CreateFile("\\\\.\\LPTSTAT1", GENERIC_READ, 0, IntPtr.Zero, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero);
  if (m_hParstat.ToInt32() == INVALID_HANDLE_VALUE)
  {

  }

但是VS说比较没有用,因为常量超出了int的范围。如何检查我的句柄是否有有效值?

最佳答案

这很可能是因为你的常量不是 Int32。变化:

public const UInt32 INVALID_HANDLE_VALUE = 0xffffffff;

public const Int32 INVALID_HANDLE_VALUE = -1;

另一个选项是更改 CreateFile 定义以返回 SafeFileHandle而不是 IntPtr。然后您可以使用IsInvalidIsClosed属性。

关于c# - CreateFile 的端口 INVALID_HANDLE_VALUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5820887/

相关文章:

c# - 如何在 Visual Studio IDE 中预览 win 表单设计

c# - 从数据库中删除满足条件的条目的最有效方法是什么?

c# - LINQ To SQL 能否检测到表关联中断的位置?

c# - MemoryStream 写入数据的地方

c# - 为什么我在这里收到 "' System.Windows.Forms.Control' 不包含 'Checked' ...”的定义?

带更新的 C# SqlCommand 查询

c# - 如何在使用 '.NETFramework,Version=v4.5.2' 的项目中安装 System.Drawing.Common?

c# - 从 XSD 模式生成类

c# - 如何在 wpf 中动态显示控件?

C#:在索引页中设置 HttpCookie 内容,然后在整个网站上消失