public CabUnpacker(CabEngine cabEngine) : base(cabEngine) { fdiAllocMemHandler = CabAllocMem; fdiFreeMemHandler = CabFreeMem; fdiOpenStreamHandler = CabOpenStream; fdiReadStreamHandler = CabReadStream; fdiWriteStreamHandler = CabWriteStream; fdiCloseStreamHandler = CabCloseStream; fdiSeekStreamHandler = CabSeekStream; fdiHandle = NativeMethods.FDI.Create( fdiAllocMemHandler, fdiFreeMemHandler, fdiOpenStreamHandler, fdiReadStreamHandler, fdiWriteStreamHandler, fdiCloseStreamHandler, fdiSeekStreamHandler, NativeMethods.FDI.CPU_80386, ErfHandle.AddrOfPinnedObject()); if (Erf.Error) { int error = Erf.Oper; int errorCode = Erf.Type; ErfHandle.Free(); throw new CabException( error, errorCode, CabException.GetErrorMessage(error, errorCode, true)); } }
protected override void Dispose(bool disposing) { try { if (disposing) { if (fdiHandle != null) { fdiHandle.Dispose(); fdiHandle = null; } } } finally { base.Dispose(disposing); } }