BCB5 Enterprise+XP funktioniert nicht



  • Also ich habe ja nen paar kleine Programme in C++ und der VCL programmiert.
    Ich arbeite auf ein WIN ME wenn ich das Programm jetzt auf ein XP PC ausführe,
    macht der Fehler wie Schleifen endlos bearbeiten oder Datein nicht bearbeiten.

    Wenn ich auf Kompatibiläts Modus WIN ME nehme geht es zum Teil,er macht keine endlos Schleifen aber,er spinnt wieder bei Datein rum.

    Updates sind alle installiert.

    Liegt es Compiler oder ist die VCL nicht XP kompatible?



  • Der naheliegendste Grund dürfte dein eigener Code sein.
    NT und seine Nachfolger sind in Sachen Speicherverwaltung usw. erheblich restriktiver als Windows9x, deshalb ist es gut möglich, dass dort Fehler zutage treten, die unter 9x vom Betriebssystem grosszügig "übersehen" werden.

    Erstelle ggf. ein Minimalprojekt (Code + Exe), das die Probleme aufweist, und lade es irgendwo hoch, damit wir versuchen können, das nachvollziehen.



  • Ok ich werde versuchen ein Programm zu schreiben was die Fehler aufweist.
    Weil bei manchen habe ich es bei manchen nicht.

    Hast du aber ein allgemeinen Tipp was man bei Speicherverwaltung machen kann,um dieses Problem auszumerzen.

    Ich habe in meine Projekt viele Variablen und char Arrays und AnsiString davon aber vielleicht maximal 10% In dynamischer Fassung.

    Könnte das ein Auslöser sein?



  • Ich hab' mehr als ein Dutzend, mit dem BCB5 Pro entwickelte Programme auf mittlerweile etlichen Rechnern mit XP laufen. Dort sind keine Probleme aufgetreten.

    Deshalb schließe ich mich Jansen's Vermutung an (oder heißt es Jansens Vermutung?).

    Grüße Joe_M.



  • the_hero99:
    Du könntest versuchen, mit Tools wie CodeGuard (Lieferumfang bei Enterprise und evtl. Prof.) oder MemProof nach Speicherlecks zu suchen. Ansonsten bleibt halt, darauf zu achten, dass es zu jedem new ein delete gibt, dass char-Arrays ausreichend gross dimensioniert sind usw., das Übliche eben.

    Joe_M. schrieb:

    oder heißt es Jansens Vermutung?

    Unbedingt!



  • Wenn das Wetter mal schlechter wird,und ich mehr Zeit zum programmieren habe,werde ich mal alle Integer und char Arrays dynamisch erzeugen und löschen.

    Denn ich denke das knapp 90 Integer und Char Arrays viel Speicher fressen.



  • Warum nutzt du überhaupt noch C-Strings, wo es doch zum einen std::string und zu anderen AnsiString gibt (welche dir beide zur not auch ein const cahr* zurückliefern ;)) ?



  • Also ich hab vorher nur Konsolen programmiert,und kenne daher noch die Standard C++ Befehle.
    Nun wollte ich nur wissen, ob es Sinn macht alles auf Pointer und Referenzen umzustellen.
    Weil mein Programm schon 4000 Zeilen habe,ist es viel Arbeit alles umzuschreiben.



  • Wenn du Standard C++ kennst, kennst du auch std::string. Ich denke alles auf Referenzen und/oder Pointer umzuwandeln ist nicht sehr sinnvoll. Aber bei manchen sachen lohnt es sich definitiv. 😉



  • Ich weiss ja halt nur nicht was der Fehler ist, die Schleife habe ich schon vorher einmal genutzt, ohne Probleme.

    Ob es an an einen 25MB Char liegt der nicht dynamisch(Referenz,Pointer) ist, weiss ich nicht.

    Am besten ich vergess das problem auch und muss mich abfinden, dass Programme
    die ich schreibe nur auf NT freien OS laufen. Weil mir nix anderes mehr einfällt und ich auch noch keinen Konkreten Lösungsvorschlag habe.



  • the_hero99 schrieb:

    Ob es an an einen 25MB Char liegt der nicht dynamisch(Referenz,Pointer) ist, weiss ich nicht.

    😮

    Du solltest dir DRINGEND Gedanken über dein Design machen. Was willst du mit einem 25 Megabyte großen char-Array denn anstellen? Liest du Dateien ein oder was? Wenn ja, solltest du sie mappen. Zum anderen ist die Frage ob sich so einfach 25 MB reservieren lassen.



  • Also ja ich lese 25MB grosse Datei Teile ein.
    Das geht auch alles auf ein NT freien System.

    Nun weiss ich nicht was dieses verdammte XP aufmuckt.

    Ich verzweifel ich hab schon alles getestet.
    Borland auf ein XP System installed.

    Mit eingebundene DLL's,Funktionen aufgehoben und alles in je eine Funktion gequetscht usw..

    Nur ich komme nicht weiter.



  • Die NT-Versionen nach NT 4.0 (2k/XP) haben eine andere Speicherverwaltung. Hier kann nicht mehr einfach mal eben jede Menge Speicher reserviert/alloziert werden. Und 25 MB große Daten-Teile sind viel zu viel und vor allem zu unhandlich.
    Des weiteren solltest du mal Jansens Rat befolgen und deinen Code nochmal durchgehen, denn der Fehler liegt bestimmt nicht an XP. Warum liest du die Daten eigentlich in so großen Stücken ein? Veringere die Daten Menge.

    Mal interessehalber, was soll dein Programm eigentlich machen?



  • Also das Programm um was es geht http://www.c-plusplus.net/forum/viewtopic.php?t=80296 da haben alle gesagt ich soll,wegen der Effizenz alles Blockweise lesen.

    Nun sagst du es geht nicht so.

    Das ganze rennt ja unter ME nun verzweifel ich.

    Wie sagt man XP das er auch ruhig 25Mb im Speicher zuteilt?
    bzw. das geht ja auch.

    Nur die Schleifen macht er endlos.

    Und bevor jetzt einer sagt Variable nicht richtig initialisiert bzw. falsche Werte, ich habe es mit ein Debugger getestet(unter ME ohne Probleme).

    Nur wie wie wie kann ich das Tool XP kompatibel machen?

    Dann fummelt man Tage lang an einer Suchroutine die Speed hatt,und dann macht XP big trouble in little wondows.



  • the_hero99 schrieb:

    Nun sagst du es geht nicht so.

    Nein habe ich nie. Ich habe gesagt du sollst die Blöcke verkleinern und damit meine ich Blöckgrößen < 1 MB. Damit lässt sich IMHO wesentlich besser arbeiten.



  • @hero_99

    Hast Du die Routine aus meinem Beispiel in dem anderen Thread mal verwendet. Dort war der Lesepuffer sogar nur 1 KB groß und dynamisch erzeugt.

    Und 'ne dumme Frage: Verwendest Du den BCB6 unter Win ME? Ich weiß, dass Windows 98 vom BCB 6 nicht unterstützt wird. Kann mir nicht vorstellen, dass das mit ME anders sein soll...

    Grüße Joe_M.



  • zufaulzumeinloggen schrieb:

    Ich weiß, dass Windows 98 vom BCB 6 nicht unterstützt wird.

    Wie kommst du darauf?
    BCB6 System Requirements: Microsoft® Windows® 98, 2000 (SP2), and XP



  • Ich habe Borland 5 Enterprise.
    Die 6er war selbst bei Ebay zu teuer.

    Also den Buffer erstmal dynamisch erstellen,und dann den Wert wo er Leer läuft,die Schleife,vielleicht mal als Pointer benutzen.

    Mal sehen ob das was bringt.



  • @Jansen: Die Info habe ich seinerzeit von Borland EMEA erhalten. Als ich vor 2 Jahren auf den BCB 6 gewechselt habe, hatte ich ein paar Probleme unter Win 98. Diverse Dinge fehlten, u.a. der ClassExplorer. Borland EMEA hat mir empfohlen auf Win 2000 oder XP zu wechseln. Vielleicht hat sich das aber mit den Patches erledigt...



  • Schick doch mal Code rüber, der Ärger macht. Dann kann man auch konkret helfen.


Log in to reply