Linker-Probleme mit fremder Klasse



  • Hallo,

    nach langer Suche hab ich endlich eine einfach zu verwendende XML-Klasse gefunden: http://www.codeproject.com/soap/markupclass.asp.

    Wie erwartet, habe ich beim Linken Probleme bekommen 😉
    Leider kann ich diese Probleme nicht selbst lösen da ich nur wenig Wissen über Bibliotheken, den Linker etc... habe.
    Ich verwende Visual C++ 2003 unter Win32, also im Moment noch kein .NET.

    Zunächst wurde stdafx.h nicht gefunden. Ich hab dann einfach folgendes angegeben:
    "<Visual C++ Pfad>\Vc7\atlmfc\src\mfc\stdafx.h"
    War das richtig von mir?

    Danach bekam ich ein paar Linker-Fehler:

    error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) bereits in LIBCD.lib(new2.obj) definiert
    error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) bereits in LIBCD.lib(new.obj) definiert
    error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) bereits in LIBCD.lib(dbgdel.obj) definiert
    error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) bereits in LIBCD.lib(delete2.obj) definiert
    error LNK2019: Nicht aufgelöstes externes Symbol '__beginthreadex', verwiesen in Funktion '"public: int __thiscall CWinThread::CreateThread(unsigned long,unsigned int,struct _SECURITY_ATTRIBUTES *)" (?CreateThread@CWinThread@@QAEHKIPAU_SECURITY_ATTRIBUTES@@@Z)'
    error LNK2019: Nicht aufgelöstes externes Symbol '__endthreadex', verwiesen in Funktion '"void __stdcall AfxEndThread(unsigned int,int)" (?AfxEndThread@@YGXIH@Z)'
    fatal error LNK1120: 2 unaufgelöste externe Verweise
    

    Der Include-Teil von Markup.cpp sieht so aus:

    #include "C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\src\mfc\stdafx.h"
    #include "afxconv.h"
    #include "Markup.h"
    
    #ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif
    
    #ifdef _MBCS
    #pragma message( "Note: MBCS build (not UTF-8)" )
    // For UTF-8, remove _MBCS from project settings C/C++ preprocessor definitions
    #endif
    
    // Defines for Windows CE
    #ifdef _WIN32_WCE
    #define _tclen(p) 1
    #define _tccpy(p1,p2) *(p1)=*(p2)
    #endif
    

    Hier ist der Include-Teil von Markup.h:

    #if !defined(AFX_MARKUP_H__948A2705_9E68_11D2_A0BF_00105A27C570__INCLUDED_)
    #define AFX_MARKUP_H__948A2705_9E68_11D2_A0BF_00105A27C570__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #include <afxtempl.h>
    
    #ifdef _DEBUG
    #define _DS(i) (i?&((LPCTSTR)m_csDoc)[m_aPos[i].nStartL]:0)
    #define MARKUP_SETDEBUGSTATE m_pMainDS=_DS(m_iPos); m_pChildDS=_DS(m_iPosChild)
    #else
    #define MARKUP_SETDEBUGSTATE
    #endif
    

    Die Compiler-Optionen:

    /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /EHsc /RTC1 /MLd /GS /Fo"Debug/" /Fd"Debug/vc70.pdb" /W1 /nologo /c /Wp64 /Zd /TP
    

    Die Linker-Optionen:

    /OUT:"Debug/test.exe" /INCREMENTAL /NOLOGO /DEBUG /PDB:"Debug/test.pdb" /SUBSYSTEM:WINDOWS /MACHINE:X86   kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
    d3dx9.lib d3d9.lib d3dxof.lib dxguid.lib dinput8.lib dsound.lib dxerr9.lib
    

    Ich glaube, dass ich von irgendwelchen Bibliotheken eine andere Version verwende als die fremde Klasse, habe aber keine Ahnung welche das sein könnten.

    Könnt ihr mir helfen?

    mfg. Tubos



  • was hast du für ein projekt ausgewält?

    Du MUSST ein MFC project erstellen ( oder die ganzen sachen so reinpfuschen )

    aber am besten wähle einfach ein MFC Projekt aus, dann kopiere die .h und .cpp die runtergeladene in das verzeichnis rein wo die anderen sind und includiere nur die neue .h und das wars!

    du kannst auch die xml in einer art "lib" ordner reinkopieren und dann den pfad in den eigenschaften eingeben

    bei einem ganhz normalen consolenprojekt "leer erstellung" ist es schwer alles richtig einzubinden ( wegen stdafx.h schonmal )



  • Super, hab das ganze Projekt als MFC Projekt neu erstellt, alle unnötigen MFC-Sachen außer stdafx gelöscht und plötzlich ging alles reibungslos.

    Danke für die schnelle Hilfe!

    mfg. Tubos


Anmelden zum Antworten