Click here to Skip to main content
15,898,820 members
Articles / Desktop Programming / MFC

Zip and Unzip in the MFC way

Rate me:
Please Sign up or sign in to vote.
4.92/5 (59 votes)
12 Oct 2011CPOL 1.6M   27.1K   283   370
A library to create, modify, and extract Zip archives.

Sample Image

Overview

This library allows creating, modifying, and extracting zip archives in a compatible way with PKZIP (2.5 and higher) and WinZip. Supported are all possible operations on the zip archive: creating, extracting, adding, deleting files from the archive, modifications of the existing archive. There is also support for creating and extracting multiple disk archives (on non-removable devices as well) and for password encryption and decryption. This module uses compression and decompression functions from the zlib library by Jean-loup Gailly and Mark Adler.

How to integrate with the project

Zip is a static library and statically links to the compiled zlib.lib (version 1.13 nowadays). The zlib library can be replaced with a newer version, providing you also replace the files "zlib.h" and "zconf.h" in the Zip project. The Zip library uses MFC in a shared library as a Release and Debug configuration. Your project must use MFC in the same way in the appropriate project configuration. You may need to adapt this to your needs. To add Zip library functionality to your project, you need to link the library to the project. You can do this in at least two ways (in both cases, you need to include the ZipArchive.h header in your sources like this: #include "ZipArchive.h"):

Method 1

Add "..\Zip\debug(release)\ZipArchive.lib" to Project Settings->Link->Input->Object/library modules and add the Zip directory to the preprocessor searches (Project Settings -> C++ -> Preprocessor -> Additional include directories).

Method 2 (simpler)

Insert the Zip project into the workspace and set the project dependencies (your project dependent on the Zip project).

How to use

The details about using this library are in the sources. The example available for download at the bottom of the page is an almost complete compression\decompression program. There are only the main issues mentioned below about using this library. If you have a question about using the library and you can't find the answer here, don't hesitate to ask.

Compression and decompression

There are some functions defined for fast operations on archives; among others: AddNewFile(), ExtractFile(), DeleteFile(). You only need to call the functions Open() - before, and Close() - after using them. Remember to call the Close() function when you finish working with the CZipArchive class.

Multi-disk archives

This library supports two kinds of multi-disk archives:

  1. Disk spanning performed in the compatible way with all other main zip programs. It means that the archive can only be created on a removable device, the size of the volume is auto-detected, and the label is written to the disk. To use this kind of disk spanning, you need to define a static callback function for changing disks and set it with the SetSpanCallback() function.
  2. Disk spanning performed in the internal mode, called in the sources TD span mode. This allows creating multi disk archives also on non-removable devices and with user-defined volume size. There is no need to set the callback function in this mode.

These two disk spanning modes create volumes with compatible internal structure. It means that you can easily convert the volumes created in one mode to the other one by renaming the files (in TD mode, each volume but last has a number as an extension). To convert the archive from TD to PKZIP compatible archive, copy each file to the removable media, giving the extension ".zip". You should also label each disk with the appropriate label starting from "pkback# 001".

There is a limited function set available when working with multi-disk archives. Only adding is allowed when creating an archive and only extracting and testing when opening an existing one. Deleting files from these archives isn't allowed in any of these cases.

The class CZipArchive uses a write buffer to make write operations extremely fast. You can change its size with the SetAdvanced() function. While creating a multi-disk archive, set the size of the buffer to the maximum size of the volume for the best performance.

Popular archivers such as PKZIP and WinZip cannot operate on an archive in TD span mode. You need to convert them to PKZIP span mode (have a look above). Remember about copying the files to the removable media (it does not comply with WinZip, which can extract a multi-disk archive from any media but only from a fixed location on the drive).

Password encryption and decryption

This library supports creating and extracting of password protected archives. There are several issues you should be aware of when using this feature. To set the password for the file to be added or extracted, call the function SetPassword() with the password as the argument. To clear the password, call this function without arguments or with an empty string argument. The function has no effect on a closed archive and on the currently opened file (whether new or existing) inside the archive.

During opening an archive, the password is cleared and it is not changed if the file inside the archive is opened. You can set different passwords for different files inside the same archive, but remember to set it before opening the file. You cannot use ASCII characters with codes above 127 in a password; if you do so, the function SetPassword() returns false and the password is cleared. If the password is cleared, no encryption or decryption takes place.

You can find out what files are password encrypted by calling CZipArchive::GetFileInfo() which fills the structure CZipFileHeader with data, and then the method IsEncrypted() of this structure. If it returns true, the file needs a password to extract.

Successful extraction of the encrypted file doesn't always mean that the password is correct. CZipArchive doesn't check for a CRC if m_info.m_uUncomprLeft is not zero in the function CZipArchive::CloseFile(). In some cases, a bad password causes that this value is not zero, so you have to also check for the return value of this function (it returns -1 in this case). You can also check the size of the extracted file since it will be smaller than it should be.

Self extract support

The library automatically detects self-extracting archives. This is the simplest self-extract code:

C++
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
    CZipArchive zip;

    // get path of executable
    TCHAR szBuff[_MAX_PATH];
    if (!::GetModuleFileName(hInstance, szBuff, _MAX_PATH))

        return -1;

    CString szDest;
    // ...
    // add the code here to get the destination directory from the user 
    // for example:
    /* CBrowseForFolder bf;
       bf.strTitle = _T("Select directory to extract files");
       if (!bf.GetFolder(szDest))
           return -1;
    */
    // class CBrowseForFolder is included in the example project
    // remember about including the header!

    zip.Open(szBuff, CZipArchive::openReadOnly); 
    // openReadOnly mode is necessary for self extract archives
    for (WORD i = 0; i < zip.GetNoEntries(); i++)
        zip.ExtractFile(i, szDest);

    zip.Close();
    return 0;
    // this code will not work for the encrypted archives since it is needed
    // to get the password from the user ( a small addition to the 
    // existing code I suppose )
}

After compiling it and appending a zip archive to it (e.g., with the DOS command: copy /b SelfExtract.exe + ZipFile.zip FinalFile.exe), we have a self extracting archive.

Testing the integrity of the archive

The new functions have been provided to allow the testing of the integrity of the archive. The first one is CZipArchive::TestFile which is a comprehensive testing function, but if you need a different functionality, you can make your own by taking advantage of the second function provided: CZipArchive::CloseFileAfterTestFailed. The detailed description and the example of use are provided in the sources and in the example project.

Exceptions

The library throws the following exceptions: CMemoryException, CFileExeption, and CZipException. The first two don't need an explanation. The last is thrown when some internal error occurs. Handling them may be done in the following way:

C++
try
{
    // ...
    // some operations on Zip library
}
catch (CException* e)
{
    if (e->IsKindOf( RUNTIME_CLASS( CZipException )))
    {
        CZipException* p = (CZipException*) e;
        //... and so on 
    }
    else if (e->IsKindOf( RUNTIME_CLASS( CFileException )))
    {
        CFileException* p = (CFileException*) e;
        //... and so on 
    } 
    else
    {
        // the only possibility is a memory exception I suppose
        //... and so on 
    }
    e->Delete();
}

Handling the extra field

The extra field of the file can be different in the local and central headers. To set the extra filed in the local header, set it in the header parameter of the CZipArchive::OpenNewFile function. After that the extra field is written to the local header and cleared. You should call the CZipArchive::SetExtraField function anytime after opening the new file (but before closing it) to set the file extra field in the central directory.

Sample application

To run the example, integrate the first Zip library into it (the Zip library is not included in the example, you must download it separately); you should be asked at the beginning about the location of the Zip project, if not, use one of the integration methods described above. If you don't put the Zip library project at the same directory level that the sample application is, you also have to change the path pointing to ZipArchive.h in the file testzipdlgdlg.h.

Linking errors

When you experience linking errors (mostly LNK2005), you need to make sure that the library and your program are both using the single-threaded or both multithreaded library. The option "Project->Settings-> c/c++ ->Code Generation->Use run-time library" should be set to the same value in the ZipArchive library and the program project options.

If it doesn't help, try recompiling the zlib library (zlib.lib provided with the project is compiled from a release configuration and uses the multithreaded DLL run-time library). You can download the zlib library sources from http://www.artpol-software.com/index_zip.html. Use the zlibstat project. Set the "Use run-time library" option to the same value as you set it in the ZipArchve library and your program configurations. Compile the Release configuration of the zlib library and replace it with the file zlib.lib in the ZipArchive folder. You may however experience linking warnings or errors while compiling the Debug configuration. To eliminate them, do as follows:

  • Compile the Debug and Release configurations of the zlib library.
  • Copy zlib_d.lib from Debug and zlib.lib from the Release directory to the ZipArchive directory.
  • Add these files to the ZipArchive project (Project -> Add To Project -> Files...).
  • Go to the project settings dialog (Project -> Settings).
  • Select debug configurations (Setting For -> Multiple Configurations) such as Debug and Unicode Debug.
  • Select the zlib.lib file, then the General tab, and check the box "Exclude file from build".
  • Select release configurations.
  • Select zlib_.lib and exclude it from these builds.

To-do and updates

I am currently working on the non-MFC version of the library and multi-platform support. Make sure to check out the site http://www.artpol-software.com/ which is more likely to have an updated version.

History

03.2001

  • When the central directory is not located, the library throws CZipException::cdirNotFound, which allows distinguishing from other exceptions (useful when we want to keep prompting the user to insert the last disk in a multi-disk spanning archive).

02.2001

Features added:

  • Ability to reuse the archive after an exception thrown during extraction.
  • Added progress control possibilities to CZipArchive::AddNewFile, CZipArchive::ExtractFile, CZipArchive::TestFile.

Changes:

  • CZipArchive::FindFile operation boosted (thanks to Darin Warling for the idea).
  • Library name changed to ZipArchive.

Bugs fixed:

  • Removed bug during extracting an encrypted file with 0 size.
  • Fixed bug when extracting a file with an extra field in a local file header (CZipFileHeader::ReadLocal).

01.2001

  • Disk numbering in a disk spanning archive begins now from PKBACK# 001, not PKBACK# 000.
  • Adding and extracting without a full path possible in CZipArchive::AddNewFile and CZipArchive::ExtractFile.
  • Several minor changes and enhancements.
  • Changed names for several classes.

11.2000

  • Added support for password encryption and decryption. The encryption used in PKZIP was generously supplied by Roger Schlafly.
  • Testing the archive made easier.
  • Unicode support added.

08.2000

  • Bugs fixed.

06.2000

The code has been completely rewritten since the very beginning; the main improvements are:

  • Multi-disk archive support.
  • Creation of disk spanning archives with the user-defined volume size.
  • Ability to modify existing archives (add, delete files).
  • Modification of self-extracting archives.
  • Write buffer used for faster disk write operations.
  • One class for zip and unzip functions.
  • Fast adding, deleting, and extracting files with a single function call.

03.2000

  • International characters in filenames inside archive are now converted in a compatible way with other archiving programs (they are stored converted to OEM inside archive).

01.2000

First version; it is just modified code from zip.c and unzip.c files written by Gilles Vollant and distributed with the zlib library; the modifications are as follows:

  • Added class wrappers.
  • Several bugs fixed.
  • Several enhancements added.
  • MFC support added.
  • Memory leaks eliminated when write error occurs.
  • Automatically frees used memory on destruction or exception.
  • Modern error notification using exceptions.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer Dracz.com
Poland Poland
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Questionwildcard matching broken/incorrect? Pin
18-Dec-01 19:42
suss18-Dec-01 19:42 
AnswerRe: wildcard matching broken/incorrect? Pin
Tadeusz Dracz25-Dec-01 0:13
professionalTadeusz Dracz25-Dec-01 0:13 
QuestionHow to check a file to see if it is an archive Pin
Phil Iott21-Oct-01 4:35
Phil Iott21-Oct-01 4:35 
AnswerRe: How to check a file to see if it is an archive Pin
Carlos Antollini21-Oct-01 4:50
Carlos Antollini21-Oct-01 4:50 
AnswerRe: How to check a file to see if it is an archive Pin
Tadeusz Dracz21-Oct-01 6:26
professionalTadeusz Dracz21-Oct-01 6:26 
GeneralRe: How to check a file to see if it is an archive Pin
Phil Iott21-Oct-01 7:29
Phil Iott21-Oct-01 7:29 
GeneralRe: How to check a file to see if it is an archive Pin
Tadeusz Dracz21-Oct-01 20:24
professionalTadeusz Dracz21-Oct-01 20:24 
GeneralRe: How to check a file to see if it is an archive Pin
Phil Iott22-Oct-01 2:08
Phil Iott22-Oct-01 2:08 
Rather than trying to explain I'll just list them here:

Linking...
nafxcw.lib(strcore.obj) : error LNK2005: "public: __thiscall CString::CString(class CString const &)" (??0CString@@QAE@ABV0@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: void __thiscall CString::Empty(void)" (?Empty@CString@@QAEXXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: __thiscall CString::~CString(void)" (??1CString@@QAE@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: __thiscall CString::CString(char const *)" (??0CString@@QAE@PBD@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: class CString const & __thiscall CString::operator=(class CString const &)" (??4CString@@QAEABV0@ABV0@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: class CString const & __thiscall CString::operator=(char const *)" (??4CString@@QAEABV0@PBD@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "class CString __stdcall operator+(class CString const &,class CString const &)" (??H@YG?AVCString@@ABV0@0@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "class CString __stdcall operator+(class CString const &,char const *)" (??H@YG?AVCString@@ABV0@PBD@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "class CString __stdcall operator+(char const *,class CString const &)" (??H@YG?AVCString@@PBDABV0@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: class CString const & __thiscall CString::operator+=(char const *)" (??YCString@@QAEABV0@PBD@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: class CString const & __thiscall CString::operator+=(char)" (??YCString@@QAEABV0@D@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: class CString const & __thiscall CString::operator+=(class CString const &)" (??YCString@@QAEABV0@ABV0@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: char * __thiscall CString::GetBuffer(int)" (?GetBuffer@CString@@QAEPADH@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: void __thiscall CString::ReleaseBuffer(int)" (?ReleaseBuffer@CString@@QAEXH@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: char * __thiscall CString::GetBufferSetLength(int)" (?GetBufferSetLength@CString@@QAEPADH@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: int __thiscall CString::Find(char)const " (?Find@CString@@QBEHD@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: int __thiscall CString::Find(char,int)const " (?Find@CString@@QBEHDH@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(strcore.obj) : error LNK2005: "public: void __thiscall CString::MakeUpper(void)" (?MakeUpper@CString@@QAEXXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(except.obj) : error LNK2005: "public: __thiscall CException::CException(void)" (??0CException@@QAE@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(except.obj) : error LNK2005: "public: __thiscall CException::CException(int)" (??0CException@@QAE@H@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(except.obj) : error LNK2005: "public: void __thiscall CException::Delete(void)" (?Delete@CException@@QAEXXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(except.obj) : error LNK2005: "public: virtual int __thiscall CException::GetErrorMessage(char *,unsigned int,unsigned int *)" (?GetErrorMessage@CException@@UAEHPADIPAI@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(except.obj) : error LNK2005: "public: virtual int __thiscall CException::ReportError(unsigned int,unsigned int)" (?ReportError@CException@@UAEHII@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: __thiscall CFile::CFile(void)" (??0CFile@@QAE@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: __thiscall CFile::CFile(char const *,unsigned int)" (??0CFile@@QAE@PBDI@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual __thiscall CFile::~CFile(void)" (??1CFile@@UAE@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual class CFile * __thiscall CFile::Duplicate(void)const " (?Duplicate@CFile@@UBEPAV1@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual int __thiscall CFile::Open(char const *,unsigned int,class CFileException *)" (?Open@CFile@@UAEHPBDIPAVCFileException@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual unsigned int __thiscall CFile::Read(void *,unsigned int)" (?Read@CFile@@UAEIPAXI@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual void __thiscall CFile::Write(void const *,unsigned int)" (?Write@CFile@@UAEXPBXI@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual long __thiscall CFile::Seek(long,unsigned int)" (?Seek@CFile@@UAEJJI@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual unsigned long __thiscall CFile::GetPosition(void)const " (?GetPosition@CFile@@UBEKXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual void __thiscall CFile::Flush(void)" (?Flush@CFile@@UAEXXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual void __thiscall CFile::Close(void)" (?Close@CFile@@UAEXXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual void __thiscall CFile::Abort(void)" (?Abort@CFile@@UAEXXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual void __thiscall CFile::LockRange(unsigned long,unsigned long)" (?LockRange@CFile@@UAEXKK@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual void __thiscall CFile::UnlockRange(unsigned long,unsigned long)" (?UnlockRange@CFile@@UAEXKK@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual void __thiscall CFile::SetLength(unsigned long)" (?SetLength@CFile@@UAEXK@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual unsigned long __thiscall CFile::GetLength(void)const " (?GetLength@CFile@@UBEKXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: virtual unsigned int __thiscall CFile::GetBufferPtr(unsigned int,unsigned int,void * *,void * *)" (?GetBufferPtr@CFile@@UAEIIIPAPAX0@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: static void __stdcall CFile::Rename(char const *,char const *)" (?Rename@CFile@@SGXPBD0@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filecore.obj) : error LNK2005: "public: static void __stdcall CFile::Remove(char const *)" (?Remove@CFile@@SGXPBD@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(objcore.obj) : error LNK2005: "public: virtual struct CRuntimeClass * __thiscall CObject::GetRuntimeClass(void)const " (?GetRuntimeClass@CObject@@UBEPAUCRuntimeClass@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appui1.obj) : error LNK2005: "public: virtual int __thiscall CWinApp::DoMessageBox(char const *,unsigned int,unsigned int)" (?DoMessageBox@CWinApp@@UAEHPBDII@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appui1.obj) : error LNK2005: "int __stdcall AfxMessageBox(char const *,unsigned int,unsigned int)" (?AfxMessageBox@@YGHPBDII@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(afxstate.obj) : error LNK2005: "class AFX_MODULE_STATE * __stdcall AfxGetModuleState(void)" (?AfxGetModuleState@@YGPAVAFX_MODULE_STATE@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winstr.obj) : error LNK2005: "public: int __thiscall CString::LoadStringA(unsigned int)" (?LoadStringA@CString@@QAEHI@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filex.obj) : error LNK2005: "public: static void __stdcall CFileException::ThrowOsError(long,char const *)" (?ThrowOsError@CFileException@@SGXJPBD@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filex.obj) : error LNK2005: "public: virtual int __thiscall CFileException::GetErrorMessage(char *,unsigned int,unsigned int *)" (?GetErrorMessage@CFileException@@UAEHPADIPAI@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filex.obj) : error LNK2005: "public: virtual struct CRuntimeClass * __thiscall CFileException::GetRuntimeClass(void)const " (?GetRuntimeClass@CFileException@@UBEPAUCRuntimeClass@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(thrdcore.obj) : error LNK2005: "public: virtual void __thiscall CWinThread::Delete(void)" (?Delete@CWinThread@@UAEXXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(thrdcore.obj) : error LNK2005: "public: virtual int __thiscall CWinThread::IsIdleMessage(struct tagMSG *)" (?IsIdleMessage@CWinThread@@UAEHPAUtagMSG@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(thrdcore.obj) : error LNK2005: "public: virtual int __thiscall CWinThread::PreTranslateMessage(struct tagMSG *)" (?PreTranslateMessage@CWinThread@@UAEHPAUtagMSG@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(thrdcore.obj) : error LNK2005: "public: virtual int __thiscall CWinThread::ProcessMessageFilter(int,struct tagMSG *)" (?ProcessMessageFilter@CWinThread@@UAEHHPAUtagMSG@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(thrdcore.obj) : error LNK2005: "public: virtual class CWnd * __thiscall CWinThread::GetMainWnd(void)" (?GetMainWnd@CWinThread@@UAEPAVCWnd@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(thrdcore.obj) : error LNK2005: "public: virtual int __thiscall CWinThread::PumpMessage(void)" (?PumpMessage@CWinThread@@UAEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(list_p.obj) : error LNK2005: "public: __thiscall CPtrList::CPtrList(int)" (??0CPtrList@@QAE@H@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(list_p.obj) : error LNK2005: "public: virtual __thiscall CPtrList::~CPtrList(void)" (??1CPtrList@@UAE@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(list_p.obj) : error LNK2005: "public: struct __POSITION * __thiscall CPtrList::AddTail(void *)" (?AddTail@CPtrList@@QAEPAU__POSITION@@PAX@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(list_p.obj) : error LNK2005: "public: void __thiscall CPtrList::RemoveAt(struct __POSITION *)" (?RemoveAt@CPtrList@@QAEXPAU__POSITION@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(list_p.obj) : error LNK2005: "public: struct __POSITION * __thiscall CPtrList::Find(void *,struct __POSITION *)const " (?Find@CPtrList@@QBEPAU__POSITION@@PAXPAU2@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "public: virtual int __thiscall CCmdTarget::OnCmdMsg(unsigned int,int,void *,struct AFX_CMDHANDLERINFO *)" (?OnCmdMsg@CCmdTarget@@UAEHIHPAXPAUAFX_CMDHANDLERINFO@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "public: virtual int __thiscall CCmdTarget::IsInvokeAllowed(long)" (?IsInvokeAllowed@CCmdTarget@@UAEHJ@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "public: virtual int __thiscall CCmdTarget::GetDispatchIID(struct _GUID *)" (?GetDispatchIID@CCmdTarget@@UAEHPAU_GUID@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "public: virtual unsigned int __thiscall CCmdTarget::GetTypeInfoCount(void)" (?GetTypeInfoCount@CCmdTarget@@UAEIXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "public: virtual class CTypeLibCache * __thiscall CCmdTarget::GetTypeLibCache(void)" (?GetTypeLibCache@CCmdTarget@@UAEPAVCTypeLibCache@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "public: virtual long __thiscall CCmdTarget::GetTypeLib(unsigned long,struct ITypeLib * *)" (?GetTypeLib@CCmdTarget@@UAEJKPAPAUITypeLib@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "protected: virtual struct AFX_DISPMAP const * __thiscall CCmdTarget::GetDispatchMap(void)const " (?GetDispatchMap@CCmdTarget@@MBEPBUAFX_DISPMAP@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "protected: virtual struct AFX_EVENTSINKMAP const * __thiscall CCmdTarget::GetEventSinkMap(void)const " (?GetEventSinkMap@CCmdTarget@@MBEPBUAFX_EVENTSINKMAP@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "protected: virtual struct AFX_INTERFACEMAP const * __thiscall CCmdTarget::GetInterfaceMap(void)const " (?GetInterfaceMap@CCmdTarget@@MBEPBUAFX_INTERFACEMAP@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "public: virtual void __thiscall CCmdTarget::OnFinalRelease(void)" (?OnFinalRelease@CCmdTarget@@UAEXXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "public: virtual int __thiscall CCmdTarget::OnCreateAggregates(void)" (?OnCreateAggregates@CCmdTarget@@UAEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "public: virtual struct IUnknown * __thiscall CCmdTarget::GetInterfaceHook(void const *)" (?GetInterfaceHook@CCmdTarget@@UAEPAUIUnknown@@PBX@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "protected: virtual struct AFX_CONNECTIONMAP const * __thiscall CCmdTarget::GetConnectionMap(void)const " (?GetConnectionMap@CCmdTarget@@MBEPBUAFX_CONNECTIONMAP@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "protected: virtual struct IConnectionPoint * __thiscall CCmdTarget::GetConnectionHook(struct _GUID const &)" (?GetConnectionHook@CCmdTarget@@MAEPAUIConnectionPoint@@ABU_GUID@@@Z) already defined in mfc42.lib
(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "protected: virtual int __thiscall CCmdTarget::GetExtraConnectionPoints(class CPtrArray *)" (?GetExtraConnectionPoints@CCmdTarget@@MAEHPAVCPtrArray@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(cmdtarg.obj) : error LNK2005: "protected: virtual struct AFX_OLECMDMAP const * __thiscall CCmdTarget::GetCommandMap(void)const " (?GetCommandMap@CCmdTarget@@MBEPBUAFX_OLECMDMAP@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: __thiscall CWnd::CWnd(void)" (??0CWnd@@QAE@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "protected: long __thiscall CWnd::Default(void)" (?Default@CWnd@@IAEJXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual void __thiscall CWnd::PreSubclassWindow(void)" (?PreSubclassWindow@CWnd@@UAEXXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual int __thiscall CWnd::PreCreateWindow(struct tagCREATESTRUCTA &)" (?PreCreateWindow@CWnd@@UAEHAAUtagCREATESTRUCTA@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual int __thiscall CWnd::Create(char const *,char const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,struct CCreateContext *)" (?Create@CWnd@@UAEHPBD0KABUtagRECT@@PAV1@IPAUCCr
eateContext@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "protected: virtual void __thiscall CWnd::PostNcDestroy(void)" (?PostNcDestroy@CWnd@@MAEXXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual void __thiscall CWnd::OnFinalRelease(void)" (?OnFinalRelease@CWnd@@UAEXXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual int __thiscall CWnd::DestroyWindow(void)" (?DestroyWindow@CWnd@@UAEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "protected: virtual long __thiscall CWnd::DefWindowProcA(unsigned int,unsigned int,long)" (?DefWindowProcA@CWnd@@MAEJIIJ@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "protected: virtual long (__stdcall** __thiscall CWnd::GetSuperWndProcAddr(void))(struct HWND__ *,unsigned int,unsigned int,long)" (?GetSuperWndProcAddr@CWnd@@MAEPAP6GJPAUHWND__@@IIJ@ZXZ) already defined in m
fc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual int __thiscall CWnd::PreTranslateMessage(struct tagMSG *)" (?PreTranslateMessage@CWnd@@UAEHPAUtagMSG@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual int __thiscall CWnd::OnToolHitTest(class CPoint,struct tagTOOLINFOA *)const " (?OnToolHitTest@CWnd@@UBEHVCPoint@@PAUtagTOOLINFOA@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: void __thiscall CWnd::GetWindowTextA(class CString &)const " (?GetWindowTextA@CWnd@@QBEXAAVCString@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: int __thiscall CMenu::TrackPopupMenu(unsigned int,int,int,class CWnd *,struct tagRECT const *)" (?TrackPopupMenu@CMenu@@QAEHIHHPAVCWnd@@PBUtagRECT@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual void __thiscall CWnd::WinHelpA(unsigned long,unsigned int)" (?WinHelpA@CWnd@@UAEXKI@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "protected: virtual struct AFX_MSGMAP const * __thiscall CWnd::GetMessageMap(void)const " (?GetMessageMap@CWnd@@MBEPBUAFX_MSGMAP@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "protected: virtual long __thiscall CWnd::WindowProc(unsigned int,unsigned int,long)" (?WindowProc@CWnd@@MAEJIIJ@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "protected: virtual int __thiscall CWnd::OnWndMsg(unsigned int,unsigned int,long,long *)" (?OnWndMsg@CWnd@@MAEHIIJPAJ@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "protected: virtual int __thiscall CWnd::OnCommand(unsigned int,long)" (?OnCommand@CWnd@@MAEHIJ@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "protected: virtual int __thiscall CWnd::OnNotify(unsigned int,long,long *)" (?OnNotify@CWnd@@MAEHIJPAJ@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual class CScrollBar * __thiscall CWnd::GetScrollBarCtrl(int)const " (?GetScrollBarCtrl@CWnd@@UBEPAVCScrollBar@@H@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual void __thiscall CWnd::CalcWindowRect(struct tagRECT *,unsigned int)" (?CalcWindowRect@CWnd@@UAEXPAUtagRECT@@I@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "protected: virtual int __thiscall CWnd::OnChildNotify(unsigned int,unsigned int,long,long *)" (?OnChildNotify@CWnd@@MAEHIIJPAJ@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: int __thiscall CWnd::UpdateData(int)" (?UpdateData@CWnd@@QAEHH@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual int __thiscall CWnd::CheckAutoCenter(void)" (?CheckAutoCenter@CWnd@@UAEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual int __thiscall CWnd::ContinueModal(void)" (?ContinueModal@CWnd@@UAEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual void __thiscall CWnd::EndModalLoop(int)" (?EndModalLoop@CWnd@@UAEXH@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "protected: virtual int __thiscall CWnd::SetOccDialogInfo(struct _AFX_OCC_DIALOG_INFO *)" (?SetOccDialogInfo@CWnd@@MAEHPAU_AFX_OCC_DIALOG_INFO@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wincore.obj) : error LNK2005: "public: virtual int __thiscall CWnd::IsFrameWnd(void)const " (?IsFrameWnd@CWnd@@UBEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(app3d.obj) : error LNK2005: "protected: int __thiscall CWinApp::Enable3dControls(void)" (?Enable3dControls@CWinApp@@IAEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winocc.obj) : error LNK2005: "public: virtual int __thiscall CWnd::OnAmbientProperty(class COleControlSite *,long,struct tagVARIANT *)" (?OnAmbientProperty@CWnd@@UAEHPAVCOleControlSite@@JPAUtagVARIANT@@@Z) already defined in mfc42.lib(MFC
42.DLL)
nafxcw.lib(winocc.obj) : error LNK2005: "public: class CWnd * __thiscall CWnd::GetDlgItem(int)const " (?GetDlgItem@CWnd@@QBEPAV1@H@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winocc.obj) : error LNK2005: "public: void __thiscall CWnd::SetWindowTextA(char const *)" (?SetWindowTextA@CWnd@@QAEXPBD@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winocc.obj) : error LNK2005: "public: void __thiscall CWnd::MoveWindow(int,int,int,int,int)" (?MoveWindow@CWnd@@QAEXHHHHH@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winocc.obj) : error LNK2005: "public: int __thiscall CWnd::SetWindowPos(class CWnd const *,int,int,int,int,unsigned int)" (?SetWindowPos@CWnd@@QAEHPBV1@HHHHI@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winocc.obj) : error LNK2005: "public: int __thiscall CWnd::ShowWindow(int)" (?ShowWindow@CWnd@@QAEHH@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winocc.obj) : error LNK2005: "public: int __thiscall CWnd::EnableWindow(int)" (?EnableWindow@CWnd@@QAEHH@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winocc.obj) : error LNK2005: "public: class CWnd * __thiscall CWnd::SetFocus(void)" (?SetFocus@CWnd@@QAEPAV1@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appcore.obj) : error LNK2005: "public: __thiscall CWinApp::CWinApp(char const *)" (??0CWinApp@@QAE@PBD@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appcore.obj) : error LNK2005: "public: virtual int __thiscall CWinApp::InitApplication(void)" (?InitApplication@CWinApp@@UAEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appcore.obj) : error LNK2005: "public: virtual __thiscall CWinApp::~CWinApp(void)" (??1CWinApp@@UAE@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appcore.obj) : error LNK2005: "public: virtual int __thiscall CWinApp::ExitInstance(void)" (?ExitInstance@CWinApp@@UAEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appcore.obj) : error LNK2005: "public: virtual int __thiscall CWinApp::Run(void)" (?Run@CWinApp@@UAEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appcore.obj) : error LNK2005: "public: virtual void __thiscall CWinApp::WinHelpA(unsigned long,unsigned int)" (?WinHelpA@CWinApp@@UAEXKI@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appcore.obj) : error LNK2005: "public: virtual long __thiscall CWinApp::ProcessWndProcException(class CException *,struct tagMSG const *)" (?ProcessWndProcException@CWinApp@@UAEJPAVCException@@PBUtagMSG@@@Z) already defined in mfc42.lib(M
FC42.DLL)
nafxcw.lib(appcore.obj) : error LNK2005: "public: virtual int __thiscall CWinApp::OnIdle(long)" (?OnIdle@CWinApp@@UAEHJ@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appcore.obj) : error LNK2005: "public: virtual struct CRuntimeClass * __thiscall CWinApp::GetRuntimeClass(void)const " (?GetRuntimeClass@CWinApp@@UBEPAUCRuntimeClass@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winmenu.obj) : error LNK2005: "public: static class CMenu * __stdcall CMenu::FromHandle(struct HMENU__ *)" (?FromHandle@CMenu@@SGPAV1@PAUHMENU__@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winmenu.obj) : error LNK2005: "public: int __thiscall CMenu::Attach(struct HMENU__ *)" (?Attach@CMenu@@QAEHPAUHMENU__@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winmenu.obj) : error LNK2005: "public: struct HMENU__ * __thiscall CMenu::Detach(void)" (?Detach@CMenu@@QAEPAUHMENU__@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winmenu.obj) : error LNK2005: "public: int __thiscall CMenu::DestroyMenu(void)" (?DestroyMenu@CMenu@@QAEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winmenu.obj) : error LNK2005: "public: virtual void __thiscall CMenu::DrawItem(struct tagDRAWITEMSTRUCT *)" (?DrawItem@CMenu@@UAEXPAUtagDRAWITEMSTRUCT@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winmenu.obj) : error LNK2005: "public: virtual void __thiscall CMenu::MeasureItem(struct tagMEASUREITEMSTRUCT *)" (?MeasureItem@CMenu@@UAEXPAUtagMEASUREITEMSTRUCT@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(winmenu.obj) : error LNK2005: "public: virtual struct CRuntimeClass * __thiscall CMenu::GetRuntimeClass(void)const " (?GetRuntimeClass@CMenu@@UBEPAUCRuntimeClass@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wingdi.obj) : error LNK2005: "public: __thiscall CDC::CDC(void)" (??0CDC@@QAE@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wingdi.obj) : error LNK2005: "public: int __thiscall CDC::Attach(struct HDC__ *)" (?Attach@CDC@@QAEHPAUHDC__@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wingdi.obj) : error LNK2005: "public: virtual __thiscall CDC::~CDC(void)" (??1CDC@@UAE@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wingdi.obj) : error LNK2005: "public: __thiscall CPaintDC::CPaintDC(class CWnd *)" (??0CPaintDC@@QAE@PAVCWnd@@@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wingdi.obj) : error LNK2005: "public: virtual __thiscall CPaintDC::~CPaintDC(void)" (??1CPaintDC@@UAE@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wingdi.obj) : error LNK2005: "public: int __thiscall CGdiObject::DeleteObject(void)" (?DeleteObject@CGdiObject@@QAEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wingdi.obj) : error LNK2005: "public: virtual struct CRuntimeClass * __thiscall CGdiObject::GetRuntimeClass(void)const " (?GetRuntimeClass@CGdiObject@@UBEPAUCRuntimeClass@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wingdi.obj) : error LNK2005: "public: virtual struct CRuntimeClass * __thiscall CFont::GetRuntimeClass(void)const " (?GetRuntimeClass@CFont@@UBEPAUCRuntimeClass@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(wingdi.obj) : error LNK2005: "public: virtual struct CRuntimeClass * __thiscall CBitmap::GetRuntimeClass(void)const " (?GetRuntimeClass@CBitmap@@UBEPAUCRuntimeClass@@XZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appui.obj) : error LNK2005: "public: virtual void __thiscall CWinApp::DoWaitCursor(int)" (?DoWaitCursor@CWinApp@@UAEXH@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appui.obj) : error LNK2005: "public: virtual int __thiscall CWinApp::SaveAllModified(void)" (?SaveAllModified@CWinApp@@UAEHXZ) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appui.obj) : error LNK2005: "public: virtual void __thiscall CWinApp::AddToRecentFileList(char const *)" (?AddToRecentFileList@CWinApp@@UAEXPBD@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appui.obj) : error LNK2005: "public: virtual class CDocument * __thiscall CWinApp::OpenDocumentFile(char const *)" (?OpenDocumentFile@CWinApp@@UAEPAVCDocument@@PBD@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(appui.obj) : error LNK2005: "public: virtual int __thiscall CWinApp::OnDDECommand(char *)" (?OnDDECommand@CWinApp@@UAEHPAD@Z) already defined in mfc42.lib(MFC42.DLL)
nafxcw.lib(filelist.obj) : error LNK2005: "public: __thiscall CString::CString(void)" (??0CString@@QAE@XZ) already defined in mfc42.lib(MFC42.DLL)
LINK : warning LNK4098: defaultlib "nafxcw.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
LINK : warning LNK4049: locally defined symbol "_strncpy" imported
LINK : warning LNK4049: locally defined symbol "_memmove" imported
LINK : warning LNK4049: locally defined symbol "__mbscmp" imported
LINK : warning LNK4049: locally defined symbol "_getenv" imported
LINK : warning LNK4049: locally defined symbol "_atoi" imported
LINK : warning LNK4049: locally defined symbol "_strncmp" imported
LINK : warning LNK4049: locally defined symbol "_calloc" imported
LINK : warning LNK4049: locally defined symbol "_free" imported
LINK : warning LNK4049: locally defined symbol "__itoa" imported
LINK : warning LNK4049: locally defined symbol "__setmbcp" imported
efviewDlg.obj : error LNK2001: unresolved external symbol __imp__itoa
SummaryRecord.obj : error LNK2001: unresolved external symbol __imp__itoa
OLDNAMES.lib(itoa.obi) : error LNK2001: unresolved external symbol __imp__itoa
efviewDlg.obj : error LNK2001: unresolved external symbol __imp___mbsicmp
record.obj : error LNK2001: unresolved external symbol __imp___mbsicmp
RecordContainer.obj : error LNK2001: unresolved external symbol __imp___mbsicmp
Release/efview.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
Creating browse info file...

155 error(s), 11 warning(s)

GeneralRe: How to check a file to see if it is an archive Pin
Tadeusz Dracz22-Oct-01 6:24
professionalTadeusz Dracz22-Oct-01 6:24 
GeneralBug Pin
17-Oct-01 23:04
suss17-Oct-01 23:04 
GeneralOpening from Explorer. Pin
Jon Newman8-Oct-01 9:54
Jon Newman8-Oct-01 9:54 
GeneralRe: Opening from Explorer. Pin
Tadeusz Dracz9-Oct-01 0:09
professionalTadeusz Dracz9-Oct-01 0:09 
GeneralOpening a zip archive in a document/view app. Pin
Jon Newman9-Oct-01 7:25
Jon Newman9-Oct-01 7:25 
Generalpoor OO-design Pin
olympic8-Oct-01 0:50
olympic8-Oct-01 0:50 
GeneralRe: poor OO-design Pin
Tadeusz Dracz13-Oct-01 10:24
professionalTadeusz Dracz13-Oct-01 10:24 
GeneralRe: poor OO-design Pin
olympic16-Oct-01 5:18
olympic16-Oct-01 5:18 
GeneralRe: poor OO-design Pin
16-Oct-01 8:30
suss16-Oct-01 8:30 
GeneralRe: poor OO-design Pin
olympic16-Oct-01 9:18
olympic16-Oct-01 9:18 
GeneralRe: poor OO-design Pin
Tadeusz Dracz16-Oct-01 12:39
professionalTadeusz Dracz16-Oct-01 12:39 
GeneralRe: poor OO-design Pin
olympic16-Oct-01 21:42
olympic16-Oct-01 21:42 
GeneralRe: poor OO-design Pin
Tadeusz Dracz17-Oct-01 0:45
professionalTadeusz Dracz17-Oct-01 0:45 
GeneralRe: poor OO-design Pin
Anonymous17-Oct-02 10:45
Anonymous17-Oct-02 10:45 
Generalmemory usage Pin
ronip7-Oct-01 5:23
ronip7-Oct-01 5:23 
GeneralRe: memory usage Pin
Tadeusz Dracz7-Oct-01 7:32
professionalTadeusz Dracz7-Oct-01 7:32 
GeneralRe: memory usage Pin
ronip7-Oct-01 22:24
ronip7-Oct-01 22:24 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.