internal static unsafe DataPackage CreateFromNative(NativeRuntime.IFabricDataPackage nativePackage) { ReleaseAssert.AssertIfNull(nativePackage, "nativePackage"); string path = NativeTypes.FromNativeString(nativePackage.get_Path()); var nativeDescription = *((NativeTypes.FABRIC_DATA_PACKAGE_DESCRIPTION *)nativePackage.get_Description()); var description = DataPackageDescription.CreateFromNative(nativeDescription, path); var returnValue = new DataPackage() { Description = description, Path = path }; GC.KeepAlive(nativePackage); return(returnValue); }
private static unsafe void ParseDataPackages(NativeRuntime.IFabricCodePackageActivationContext nativeContext, ServiceManifest manifest) { IList <string> names = new List <string>(); NativeCommon.IFabricStringListResult nativeResult = nativeContext.GetDataPackageNames(); uint count; IntPtr nativeNames = nativeResult.GetStrings(out count); for (int i = 0; i < count; i++) { NativeRuntime.IFabricDataPackage dataPackageResult = nativeContext.GetDataPackage(Marshal.ReadIntPtr((IntPtr)(nativeNames + i))); NativeTypes.FABRIC_DATA_PACKAGE_DESCRIPTION nativeDescription = *(((NativeTypes.FABRIC_DATA_PACKAGE_DESCRIPTION *)dataPackageResult.get_Description())); NativeRuntime.IFabricDataPackage nativePackage = null; string packageName = NativeTypes.FromNativeString(nativeDescription.Name); using (var pin = new PinBlittable(packageName)) { nativePackage = nativeContext.GetDataPackage(pin.AddrOfPinnedObject()); } manifest.DataPackages.Add(DataPackage.CreateFromNative(nativePackage)); } }