/// <summary> /// Gets a device capability represented as an array /// </summary> /// <param name="capability">Capability to retrieve</param> /// <returns>value of capability specified in capability argument</returns> private T[] GetArrayCapability <T>(DeviceCapability capability, ReadArray <T> readArray, int itemByteSize) { uint numOutputs = UnsafeNativeMethods.DeviceCapabilitiesW(this._deviceName, this._portName, capability, SafeMemoryHandle.Null, this._devMode); if (numOutputs < 1) { return(Array.Empty <T>()); } HGlobalBuffer buffer = new HGlobalBuffer((int)(numOutputs * itemByteSize)); try { numOutputs = UnsafeNativeMethods.DeviceCapabilitiesW(this._deviceName, this._portName, capability, buffer.Handle, this._devMode); if (numOutputs >= 0) { return(readArray(buffer, itemByteSize)); } } finally { buffer.Release(); } return(null); }
/// <summary> /// Gets a device capability represented as an array /// </summary> /// <typeparam name="T">Capability item type</typeparam> /// <param name="capability">Capability to retrieve</param> /// <param name="readItem">Delegate to marshal a single capability item from unmanaged memory</param> /// <returns>An array of capabilities specified by the capability arg or null if the call fails</returns> private T[] GetArrayCapability <T>(DeviceCapability capability, ReadArray <T> readItem) where T : struct { return(GetArrayCapability <T>(capability, readItem, Marshal.SizeOf(typeof(T)))); }