CLR如何匹配c++文件访问常量与c#枚举

本文关键字:常量 枚举 访问 文件 何匹配 c++ CLR | 更新日期: 2023-09-27 18:02:33

我想知道CLR如何匹配GENERIC_READFileAccess.Read,例如。我将这个参数编组为UnmanagedType。U4

#define GENERIC_READ (0x80000000L)

,

FileAccess.Read = 1

编组程序如何知道需要什么?

CLR如何匹配c++文件访问常量与c#枚举

CreateFile的dwDesiredAccessMode参数太不正常,无法干净地映射到enum。因此,FileAccess在代码中被映射为int类型。从参考源的FileStream.cs源代码文件中,FileStream.Init()方法:

    int fAccess;
    ...
    fAccess = access == FileAccess.Read? GENERIC_READ:
    access == FileAccess.Write? GENERIC_WRITE:
    GENERIC_READ | GENERIC_WRITE;
    ...
    _handle = Win32Native.SafeCreateFile(tempPath, fAccess, ...etc)

原缩进复制,看起来很奇怪。

封送是类型之间的转换,而不是值之间的转换。所以,换句话说,我认为CLR对你的情况没有任何帮助。

如果你有一个接受整数(GENERIC_READ)的非托管函数,并且从。net调用它,你需要传递值0x80000000而不是1。CLR不能知道您希望FileAccess.Read为0x80000000