我有以下功能:
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);
Run Code Online (Sandbox Code Playgroud)
我想这样称呼:
FILES_GetMemoryMapping(MapFile, out size, MapName,
out PacketSize, null, out PagePerSector);
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法传递null一个需要类型的字段ref Mapping而且没有投射我已经尝试修复此问题.
有什么建议?
如何struct使用pinvoke 处理从C#调用的dll方法中的可选参数?例如,lpSecurityAttributes此处的参数应该null在不存在时传递.
正确的传递方式struct似乎正在使用ref,但它不能有可选参数,或者null总的来说.
有什么方法可以达到这个目的?
我有几个p /被调用的函数(但我现在正在重写我的代码所以我正在整理)我想知道如何使用/传递一个可空类型作为参数之一.使用int类型不是问题,但给出以下内容:
[DllImport("setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr SetupDiGetClassDevs(ref Guid ClassGuid, int? enumerator, IntPtr hwndParent, uint Flags);
Run Code Online (Sandbox Code Playgroud)
我希望能够将Guid参数作为可空类型传递.就目前而言,我可以将其称为:
SetupDiGetClassDevs(ref tGuid, null, IntPtr.Zero, (uint)SetupDiFlags.DIGCF_PRESENT );
Run Code Online (Sandbox Code Playgroud)
但我需要第一个参数也可以通过null.