internal int GetPropertyDataSize(uint propertyId, Edsdk.EdsDataType expectedDataType) { return(this.ExecuteGetter(() => { int dataSize; Edsdk.EdsDataType dataType; Util.Assert(Edsdk.EdsGetPropertySize(this.Handle, propertyId, 0, out dataType, out dataSize), "Failed to get property size.", propertyId); //Util.AssertIf(expectedDataType != dataType, "DataType mismatch: Expected <{0}>, Actual <{1}>", expectedDataType, dataType); return dataSize; })); }
internal T GetPropertyStruct <T>(uint propertyId, Edsdk.EdsDataType expectedDataType) where T : struct { return(this.ExecuteGetter(() => { var dataSize = this.GetPropertyDataSize(propertyId, expectedDataType); var ptr = Marshal.AllocHGlobal(dataSize); try { Util.Assert(Edsdk.EdsGetPropertyData(this.Handle, propertyId, 0, dataSize, ptr), "Failed to get required struct.", propertyId); return (T)Marshal.PtrToStructure(ptr, typeof(T)); } finally { Marshal.FreeHGlobal(ptr); } })); }