debug assert error



  • Hallo zusammen !

    Ich hab ein Problem mit einer aus einer DLL aufgerufenen Funktion. Ich arbeite mit VS.NET 2003 (hoffe ich bin in diesem Unterforum richtig) und habe ein MFC-EXE Projekt und ein Win32-DLL Projekt.

    Ich versuche nun von der EXE heraus eine Funktion aus der DLL aufzurufen - es kompiliert auch alles richtig, doch zur Laufzeit stürzt das Programm mit folgender Fehlermeldung ab :

    Debug Assertion Failed !
    File : dbgheap.c
    Line: 1132
    Expression: _CrtlsValidHeapPointer(pUserData)

    Ich hab versucht mittels Callstack den Auslöser zu finden und hab das Problem somit auf diese Zeile zurückverfolgen können :

    void CMycVSFCreatorDlg::CreateVSF(CString key, CString serial)
    {
    ...
    string TempLine = (EncryptString(key.GetBuffer(), "Testkey") + "/////" + EncryptString(serial.GetBuffer(), "Testkey"));
    ...
    }

    Die Funktion EncryptString stammt aus meiner DLL und ist wie folgt definiert :

    string EncryptString(string input, string keyword)
    {
    long* TeilVSKs = new long[8];
    long* buffer;
    int Pakete = 0;
    div_t division = div(input.length(),2);
    Pakete = division.quot + division.rem;
    buffer = new long[Pakete];
    string retVal;

    ...
    }

    Nun hab ich schon in einigen Foren nach diesem Fehler gesucht und bin dabei darauf gekommen, dass es damit zu tun hat, dass irgendwelche Speicherbereiche in verschiedenen Heaps angelegt bzw. freigegeben werden, was zu Problemen führt.
    Leider hilft mir das nicht wirklich weiter, denn VC++ ist noch relativ neu für mich und ich hab keine Ahnung, wie ich dem Problem Herr werde.

    Ich hab weiterhin den Tip gekriegt, beide Projekte, also die DLL und die EXE mit der CompilerOption /MDd - also Multithreaded Debug DLL zu erstellen. Leider funktioniert das nicht, da die EXE dann tonnenweise Compiler-Fehler bringt.

    Ich wäre für Hilfe wirklich dankbar, ich sitze schon seit einigen Tagen daran und komme einfach nicht weiter.

    Danke schonmal im Voraus !



  • Lynix schrieb:

    Leider funktioniert das nicht, da die EXE dann tonnenweise Compiler-Fehler bringt.

    Wenn du wenigstens einen hier reingeschrieben hättest... 😞



  • Kein Problem, kommt sofort :

    Abgesehen von den ca. 100 Warnings, zeigt er folgende errors an:

    MycVSFCreator error LNK2001: Nichtaufgelöstes externes Symbol ___argv

    MycVSFCreator error LNK2001: Nichtaufgelöstes externes Symbol ___argc

    MycVSFCreator error LNK2001: Nichtaufgelöstes externes Symbol __mbctype

    MycVSFCreator error LNK2001: Nichtaufgelöstes externes Symbol __mbctype

    MycVSFCreator error LNK2001: Nichtaufgelöstes externes Symbol __mbctype

    MycVSFCreator error LNK2019: Nicht aufgelöstes externes Symbol '__mbctype', verwiesen in Funktion '"void __stdcall AfxFormatStrings(class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > > &,unsigned int,char const * const *,int)" (?AfxFormatStrings@@YGXAAV?CStringT@DV?CStringT@DV?StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@IPBQBDH@Z)'

    MycVSFCreator error LNK2019: Nicht aufgelöstes externes Symbol '__mbctype', verwiesen in Funktion '"public: void __thiscall CEditView::ReadFromArchive(class CArchive &,unsigned int)" (?ReadFromArchive@CEditView@@QAEXAAVCArchive@@I@Z)'

    MycVSFCreator error LNK2019: Nicht aufgelöstes externes Symbol '__mbctype', verwiesen in Funktion '"public: int __thiscall COleInsertDialog::CreateItem(class COleClientItem *)" (?CreateItem@COleInsertDialog@@QAEHPAVCOleClientItem@@@Z)'

    MycVSFCreator fatal error LNK1120: 3 unaufgelöste externe Verweise



  • Linkst du die MFC statisch?



  • Ja, sorry hab ich vergessen zu erwähnen. Ist allerdings nicht notwendig, ich könnte esauch dynamisch versuchen, wenns damit klappt. Ich hab nur die Voreinstellung aus dem Wizard übernommen als ich das Projekt erstellt habe.



  • So funktioniert es, danke ! *freu*


Anmelden zum Antworten