C#:如何将 null 传递给需要 ref 的函数?

标签 c# null pinvoke parameters ref

我有以下功能:

public static extern uint FILES_GetMemoryMapping(
    [MarshalAs(UnmanagedType.LPStr)] string pPathFile,
    out ushort Size,
    [MarshalAs(UnmanagedType.LPStr)] string MapName,
    out ushort PacketSize,
    ref Mapping oMapping,
    out byte PagesPerSector);

我想这样调用它:

FILES_GetMemoryMapping(MapFile, out size, MapName,
    out PacketSize, null, out PagePerSector);

不幸的是,我无法在需要类型 ref Mapping 的字段中传递 null 并且我没有尝试过强制转换来修复此问题。

有什么建议吗?

最佳答案

不能传递 null 的原因是 C# 编译器对 ref 参数进行了特殊处理。任何 ref 参数都必须是可以传递给您正在调用的函数的引用。由于您想传递 null ,编译器拒绝允许这样做,因为您没有提供函数期望的引用。

您唯一真正的选择是创建一个局部变量,将其设置为 null,然后将其传入。编译器不允许您做更多的事情。

关于C#:如何将 null 传递给需要 ref 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/736474/

相关文章:

java - 使用扫描仪解析文本文件时,为什么我在每个预期字符之间得到空字符?

c# - 我想做的是 FreezableCollection.AddRange(collectionToAdd)

c# - C++ (crypto++) 和 C# 加密匹配

c# - 在 linq 中检查字符串是否为 null 或为空

objective-c - "sending a message to nil"是什么意思,为什么是特例?

vb.net - PInvoke FormatMessage Message ByRef lpBuffer As [String] 没有

c# - PInvoke问题

c# - 将 .NET P/Invoke 代码组织到 Win32 API 的最佳实践

c# - 目录监控

c# - 有没有办法在不将其放入 div 的情况下制作可滚动的 gridview?