- Attempted to read or write protected memory when accessing dll
- System.AccessViolationException: Attempted to read or write protected memory.
- This is often an indication that other memory is corrupt.
- at projectName.clsName.ZpArchive(ZCL& zcl, ZPOPT& zopts)
- at projectName.clsName.functionName() in <location>:<line>
- //ZCL Structures
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
- protected struct ZCL
- {
- public int argc; /* Count of files to zip */
- [MarshalAs(UnmanagedType.LPStr)]
- public string fzname; /* name of archive to create/update */
- public string[] zipnames; /* zip file name */
- [MarshalAs(UnmanagedType.LPStr)]
- public string fzlist; /* name of archive to create/update */
- }
- //ZPOPT Structures
- [ StructLayout( LayoutKind.Sequential )]
- protected struct ZPOPT
- {
- [MarshalAs(UnmanagedType.LPTStr)]
- public string Date; // US Date (8 Bytes Long) "12/31/98"?
- [MarshalAs(UnmanagedType.LPTStr)]
- public string szRootDir; // Root Directory Pathname (Up To 256 Bytes Long)
- [MarshalAs(UnmanagedType.LPTStr)]
- public string szTempDir; // Temp Directory Pathname (Up To 256 Bytes Long)
- public int fTemp; // 1 If Temp dir Wanted, Else 0
- public int fSuffix; // Include Suffixes (Not Yet Implemented!)
- public int fEncrypt; // 1 If Encryption Wanted, Else 0
- public int fSystem; // 1 To Include System/Hidden Files, Else 0
- public int fVolume; // 1 If Storing Volume Label, Else 0
- public int fExtra; // 1 If Excluding Extra Attributes, Else 0
- public int fNoDirEntries; // 1 If Ignoring Directory Entries, Else 0
- public int fExcludeDate; // 1 If Excluding Files Earlier Than Specified Date, Else 0
- public int fIncludeDate; // 1 If Including Files Earlier Than Specified Date, Else 0
- public int fVerbose; // 1 If Full Messages Wanted, Else 0
- public int fQuiet; // 1 If Minimum Messages Wanted, Else 0
- public int fCRLF_LF; // 1 If Translate CR/LF To LF, Else 0
- public int fLF_CRLF; // 1 If Translate LF To CR/LF, Else 0
- public int fJunkDir; // 1 If Junking Directory Names, Else 0
- public int fGrow; // 1 If Allow Appending To Zip File, Else 0
- public int fForce; // 1 If Making Entries Using DOS File Names, Else 0
- public int fMove; // 1 If Deleting Files Added Or Updated, Else 0
- public int fDeleteEntries; // 1 If Files Passed Have To Be Deleted, Else 0
- public int fUpdate; // 1 If Updating Zip File-Overwrite Only If Newer, Else 0
- public int fFreshen; // 1 If Freshing Zip File-Overwrite Only, Else 0
- public int fJunkSFX; // 1 If Junking SFX Prefix, Else 0
- public int fLatestTime; // 1 If Setting Zip File Time To Time Of Latest File In Archive, Else 0
- public int fComment; // 1 If Putting Comment In Zip File, Else 0
- public int fOffsets; // 1 If Updating Archive Offsets For SFX Files, Else 0
- public int fPrivilege; // 1 If Not Saving Privileges, Else 0
- public int fEncryption; // Read Only Property!!!
- public int fRecurse; // 1 (-r), 2 (-R) If Recursing Into Sub-Directories, Else 0
- public int fRepair; // 1 = Fix Archive, 2 = Try Harder To Fix, Else 0
- public byte flevel; // Compression Level - 0 = Stored 6 = Default 9 = Max
- [MarshalAs(UnmanagedType.LPTStr)]
- public string fSplitSize; //Null for no spliting size
- //addition for ZCL
- public int m_CountFile; //For total file on backup file.
- }
- //Import Dll:
- [DllImport("zip32.dll", SetLastError=true)]
- protected static extern int ZpArchive(ref ZCL zcl,ref ZPOPT zopts);
- //set the zip options
- m_zopts = CreateZPOPTOptions();
- ZCL zcl = new ZCL();
- zcl.argc = m_CountFile; //Total file
- zcl.fzname = m_ZipFileName;
- zcl.zipnames = m_FilesToZip;
- zcl.fzlist = null;
- //zip the files
- try
- {
- ret = ZpArchive(ref zcl,ref m_zopts);
- }
- catch(Exception e)
- {
- //<catch>
- }
- typedef struct { /* zip options */
- LPSTR Date; /* Date to include after */
- LPSTR szRootDir; /* Directory to use as base for zipping */
- LPSTR szTempDir; /* Temporary directory used during zipping */
- BOOL fTemp; /* Use temporary directory '-b' during zipping */
- BOOL fSuffix; /* include suffixes (not implemented) */
- BOOL fEncrypt; /* encrypt files */
- BOOL fSystem; /* include system and hidden files */
- BOOL fVolume; /* Include volume label */
- BOOL fExtra; /* Exclude extra attributes */
- BOOL fNoDirEntries; /* Do not add directory entries */
- BOOL fExcludeDate; /* Exclude files newer than specified date */
- BOOL fIncludeDate; /* Include only files newer than specified date */
- BOOL fVerbose; /* Mention oddities in zip file structure */
- BOOL fQuiet; /* Quiet operation */
- BOOL fCRLF_LF; /* Translate CR/LF to LF */
- BOOL fLF_CRLF; /* Translate LF to CR/LF */
- BOOL fJunkDir; /* Junk directory names */
- BOOL fGrow; /* Allow appending to a zip file */
- BOOL fForce; /* Make entries using DOS names (k for Katz) */
- BOOL fMove; /* Delete files added or updated in zip file */
- BOOL fDeleteEntries; /* Delete files from zip file */
- BOOL fUpdate; /* Update zip file--overwrite only if newer */
- BOOL fFreshen; /* Freshen zip file--overwrite only */
- BOOL fJunkSFX; /* Junk SFX prefix */
- BOOL fLatestTime; /* Set zip file time to time of latest file in it */
- BOOL fComment; /* Put comment in zip file */
- BOOL fOffsets; /* Update archive offsets for SFX files */
- BOOL fPrivilege; /* Use privileges (WIN32 only) */
- BOOL fEncryption; /* TRUE if encryption supported, else FALSE.
- this is a read only flag */
- LPSTR szSplitSize; /* This string contains the size that you want to
- split the archive into. i.e. 100 for 100 bytes,
- 2K for 2 k bytes, where K is 1024, m for meg
- and g for gig. If this string is not NULL it
- will automatically be assumed that you wish to
- split an archive. */
- LPSTR szIncludeList; /* Pointer to include file list string (for VB) */
- long IncludeListCount; /* Count of file names in the include list array */
- char **IncludeList; /* Pointer to include file list array. Note that the last
- entry in the array must be NULL */
- LPSTR szExcludeList; /* Pointer to exclude file list (for VB) */
- long ExcludeListCount; /* Count of file names in the include list array */
- char **ExcludeList; /* Pointer to exclude file list array. Note that the last
- entry in the array must be NULL */
- int fRecurse; /* Recurse into subdirectories. 1 => -r, 2 => -R */
- int fRepair; /* Repair archive. 1 => -F, 2 => -FF */
- char fLevel; /* Compression level (0 - 9) */
- } ZPOPT, _far *LPZPOPT;
- typedef struct {
- int argc; /* Count of files to zip */
- LPSTR lpszZipFN; /* name of archive to create/update */
- char **FNV; /* array of file names to zip up */
- LPSTR lpszAltFNL; /* pointer to a string containing a list of file
- names to zip up, separated by whitespace. Intended
- for use only by VB users, all others should set this
- to NULL. */
- } ZCL, _far *LPZCL;
- int EXPENTRY ZpArchive(ZCL C, LPZPOPT Opts);