我正在关注此示例代码:http://support.microsoft.com/kb/871044,但是在c#中执行此操作.
我不知道如何在c#中表达以下内容:
Public Const FILE_ATTRIBUTE_NORMAL As Short = &H80S
Public Const FILE_FLAG_NO_BUFFERING As Integer = &H20000000
Public Const FILE_FLAG_WRITE_THROUGH As Integer = &H80000000
Public Const PIPE_ACCESS_DUPLEX As Short = &H3S
Public Const PIPE_READMODE_MESSAGE As Short = &H2S
Public Const PIPE_TYPE_MESSAGE As Short = &H4S
Public Const PIPE_WAIT As Short = &H0S
Run Code Online (Sandbox Code Playgroud)
具体来说,我知道在十六进制值前加上'0x',但是在这些值的某些结尾处,S是什么?同样在第三行,当我将其转换为0x80000000时,我得到一个错误,说它无法隐式地从uint转换为int.不确定我是应该强制转换,还是更改变量的类型?
C#没有"s"符号.它只是将整数转换为short.要使0x80000000正常工作,必须将其转换为整数.但是,这可能会导致溢出异常.要取消它并创建一个负数,请将该行换行unchecked()
.
public const short FILE_ATTRIBUTE_NORMAL = 0x80;
public const int FILE_FLAG_NO_BUFFERING = 0x20000000;
public const int FILE_FLAG_WRITE_THROUGH = unchecked((int)0x80000000);
public const short PIPE_ACCESS_DUPLEX = 0x3;
public const short PIPE_READMODE_MESSAGE = 0x2;
public const short PIPE_TYPE_MESSAGE = 0x4;
public const short PIPE_WAIT = 0x0;
Run Code Online (Sandbox Code Playgroud)