Iteratoren in Dll, die mit MinGW erstellt wurde



  • Hallo,

    Bin ratlos.
    Der Code von der Dll wird völlig Fehlerfrei compiliert (mit MinGW Studio).

    Wenn die Dll dann in einer exe aufgerufen wird, gibt's nen schönen Fehler: EAccessViolation
    (exe wurde mit C++ Builder 6 erstellt)

    Ich hab den Fehler auf die Iteratoren einer "double ended queue" eingrenzen können:

    EXTERN_C DECLSPEC_EXPORT void _calculate(const std::deque<DATA_LINE *> * Values, std::deque<double> * TargetList)
    {
    using namespace std;
    
    unsigned int counter = 0;
    
    	for (deque<DATA_LINE *>::const_iterator i = Values->begin(); i!=Values->end(); i++)
    	{
    	i++; // hier krachts, wenn diese Zeile auskommentiert wird, läuft alles wunderbar
                 // aber wieso geht's dann im Schleifenheader ???
                 // sowas geht z. B. auch ned: i-1 ...
    	}
    }
    

    Wenn ich die DLL aber mit C++ Builder erstelle, dann läuft alles wunderbestens...

    thx
    Martin



  • DLLs sind für C++ nicht geeignet. Mache es so das du nur C-Datentypen als Parameter der _calculate-Funktion nimmst, oder verzichte auf die DLL.



  • gar nicht gut,
    najo, dann muss ich mir meine eigenen Listen bauen.

    Btw: im C++ Builder kann man aber auswählen, ob man eine C oder eine C++ Dll erstellen will...

    mfg
    Martin



  • wenn die deque im borland c++ builder intern einen anderen aufbau hat als im mingw compiler dann krachts natürlich.



  • kracher schrieb:

    wenn die deque im borland c++ builder intern einen anderen aufbau hat als im mingw compiler dann krachts natürlich.

    du Fuchs...

    An diese Möglichkeit hab ich noch gar ned gedacht *doh*

    thx
    Martin



  • lol. jetzt weiß ich gar nicht ob das ernst oder ironisch gemeint ist. 🤡

    tippe mal auf ironie. 😉



  • na,

    war ausnahmsweise ned ironisch gemeint 🙂



  • Falls das wirklich das Problem ist dann könntest du ja z.B. STLPort benutzen. Das ist eine STL die du auf sehr vielen Compilern benutzen kannst.


Anmelden zum Antworten