gpt4 book ai didi

c# - CreateFile 的端口 INVALID_HANDLE_VALUE

转载 作者:行者123 更新时间:2023-12-02 19:35:35 35 4
gpt4 key购买 nike

所以我将这些东西从 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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com