Zuviele komponenten = crash?



  • hallo,

    ich stehe gerade vor dem problem das mir mein programm beim beenden immer abstürzt. ich benutze ca. 40 komponenten (in unterschiedlichen formularen) aus einer importierten activex. leider scheint es beim destroyen probleme mit der menge zu geben, kann das sein? vom arbeitsspeicher wird etwa 23mb benutzt.

    wenn ich etwa 8 komponente davon benutze stürzt das programm nicht mehr ab. hat jemand eine lösung dafür?



  • Ist denn eine Komponente vllt fehlerhaft oder wird sie fehlerhaft verwendet. Kannst Du feststellen welche das ist?



  • sorry ich habe vergessen zu erwähnen das es 40x die gleiche ist (visuelle komponente)



  • Es ist schwer eine Ferndiagnose zu stellen.Vielleicht löschst Du ja ein Objekt mehrfach? Kannst Du Dich denn an die Absturzstelle herantasten? Debugger? Log?



  • ich gebe keinen speicher frei. das erledigt alles die vater klae, also die komponenten werden von der TForm verwaltet, ganz normal. debugen geht leider nicht, da die exception wahrscheinlich in der dll der activex geschieht. ich kann einfach nicht vertehen das eine bestimmte anzahl gleicher komponenten zu so etwas führen soll. die regel besagt doch meiner meinung nach: man kann oviele objekte intanziieren wie es arbeitspeicher gibt, bzw. der heap verkraftet.

    ausserdem passiert es hald immer beim beenden.



  • Deine "s"-Taste hat Aussetzer 🤡

    janga schrieb:

    ich gebe keinen speicher frei. .. die Komponenten werden von der TForm verwaltet, ganz normal. ... die regel besagt doch meiner meinung nach: man kann oviele objekte intanziieren wie es arbeitspeicher gibt, bzw. der heap verkraftet.

    Wie kommen denn nun die Komponenten auf dein Formular? Hast du eine Klasse, die du zur Laufzeit instanziierst oder platzierst du die Komponenten bereits zur Entwicklungszeit? Wenn zur Laufzeit erst, dann zeig' doch mal etwas Code (speziell instanziieren und freigeben).

    MfG

    PS: Ich sag nur: AUGENKREBS... Substantive (Nomen) und Satzanfänge werden in der deutschen Sprache groß geschrieben. "Es passiert halt" - halt wird mit "t" geschrieben.

    janga schrieb:

    die regel besagt doch meiner meinung nach...

    Entweder es handelt sich um eine Regel oder um deine Meinung, Beides geht IMHO nicht. 😉



  • Kolumbus 🤡 🤡

    Deine "s"-Taste hat Aussetzer

    du hast aufgepasst 🕶

    Wie kommen denn nun die Komponenten auf dein Formular?

    zur entwurfszeit

    Substantive (Nomen) und Satzanfänge werden in der deutschen Sprache groß geschrieben

    in den meisten programmiersprachen aber kein muss 🕶 ich will dir natürlich kein augenkrebs verschaffen 😮 🙂

    woran könnte das nun liegen?



  • janga schrieb:

    du hast aufgepasst 🕶

    Man tut was man kann - Da ich vom Programmieren so wenig Ahnung habe, konzentriere ich mich auf die Rechtschreibung 🤡

    janga schrieb:

    Wie kommen denn nun die Komponenten auf dein Formular?

    zur entwurfszeit

    Hmm, dann sollte das eigentlich wirklich keine Fehler verursachen... Ich habe einige Formulare in Anwendungen, auf denen sind etliche Komponenten (30 Edits, 30 ComboBoxen, 10 Buttons, usw) und die laufen auch fehlerfrei!

    janga schrieb:

    Substantive (Nomen) und Satzanfänge werden in der deutschen Sprache groß geschrieben

    in den meisten programmiersprachen aber kein muss 🕶

    Sehr richtig was du sagst, nur tut es nichts zur Sache! Du postest hier im Forum nämlich nicht in irgendeiner Programmiersprache, sondern mit Hilfe der deutschen Sprache. 😉

    janga schrieb:

    woran könnte das nun liegen?

    Von ActiveX hab' ich leider keinen Schimmer. Und ob es Probleme damit geben kann und welche, weiß ich erst recht nicht. Allein eine hohe Anzahl an Komponenten (40 geht aber noch finde ich) verursacht IMHO noch keine Fehler. Du solltest witte's Rat befolgen und einen Haltepunkt auf die EreignisFunktion am Ende setzen (viell. ButtonBeendenClick oder so) und ab da mal im Schrittbetrieb durchgehen... Vielleicht fällt dir noch was auf!?



  • Ich nehme eher an, dass irgendwo im Programm ein Fehler ist welcher undefiniertes Verhalten erzeugt (Zugriff auf nicht allozierten Speicher oder so). Erstelle mal ein Minimalprojekt in das du deine Komponenten einfügst (ohne weiteren Code) und schau nach ob das sich immernoch so verhält.



  • vielen dank für eure hilfe. also, ein leere projekt habe ich bereits versucht. leider ohne erfolg. ich weiss nun, das scheinbar exakt 24 komponenten davon gehen, bei der 25. gibt es immer wieder eine EAccessViolation. manchmal stürzt sogar der C++ Builder beim beenden mit drei fehlermeldungen ab und nennt mir das betroffene modul der activex.

    wenn ihr lust habt, importiert mal den mediaplayer (TWindowsMediaPlayer), setzt davon 30 stück auf die form, compiliert/linkt, und sagt mir bitte ob ihr das gleiche problem beim beenden habt.



  • Hallo

    Aha, bei TMediaPlayer ist das schon etwas anderes, schließlich bietet der Builder nur einen Wrapper für die entsprechende Windows-Funktionialität. Es könnte durchaus möglich sein das unabhängig vom Builder eben Windows mit dem Ressourcen-Management durcheinander kommt, immerhin geht es hier im recht komplexe Audio/Video-Funktionalität. Aus eigener Erfahrung weiß ich jedenfalls das selbst 100e einfache Komponente für den Builder kein Problem sind.

    Wozu brauchst du denn so viele MediaPlayer-Instanzen? Es ist doch nicht sinnvoll dutzende Filme gleichzeitig anzuschauen bzw. dutzende Songs anzuhören (sowas kann nur Data aus Star Trek 😃 ).

    bis bald
    akari



  • janga schrieb:

    wenn ihr lust habt, importiert mal den mediaplayer (TWindowsMediaPlayer), setzt davon 30 stück auf die form, compiliert/linkt, und sagt mir bitte ob ihr das gleiche problem beim beenden habt.

    Wenn du das in der IDE integrierte Ding meinst: Hab' grad mal in meinem C++Builder3 ein neues Projekt gemacht und 30 MediaPlayer-Komponenten auf ein Formular gepackt... dann Builder aus und exe gestartet (auf XP).. auch beim Schliessen lief scheinbar Alles sauber.
    Wenn du nen anderen MediaPlayer meinst: Woher bekomme ich die Komponente und wie importiere ich sie?



  • akari: hm, kann man das irgendwie "beheben" oder muss man damit leben das bei 24 schluss ist?

    Kolumbus: beim C++ builder 3 weis ich nicht ob es mit der kompatilität probleme gibt, aber: klick oben auf "Komponente", dann "ActiveX importieren" und dann "Windows Media Player (Version 1.0) auswählen" dann installieren.



  • Hallo

    janga schrieb:

    hm, kann man das irgendwie "beheben" oder muss man damit leben das bei 24 schluss ist?

    Es war ja zunächst nur ein Hinweis das der Builder für die eigentliche Funktionalität dieser Komponenten nicht verantwortlich ist. Falls es also wirklich einen solchen "nicht-mehr-als-24-Stück"-Fehler gibt liegt er weder beim Builder noch kann er mit Builder-Mitteln behoben werden. Zum Beispiel könnte ich mir vorstellen das der Soundkartentreiber nur genau 24 Soundkanäle anbietet, und jede MediaPlayer-Instanz sich eine davon reserviert. Dazu passt allerdings nicht das der Fehler erst beim Beenden, und nicht schon beim Öffnen, auftritt.

    Ich bin aber immer noch der Meinung das eine solche Menge an Audio/Video-Komponenten auf ein schlechtes Programmkonzept hindeutet.

    bis bald
    akari



  • beim C++ builder 3 weis ich nicht ob es mit der kompatilität probleme gibt, aber: klick oben auf "Komponente", dann "ActiveX importieren" und dann "Windows Media Player (Version 1.0) auswählen" dann installieren.

    Dieses Vorgehen habe ich jetzt mal beim BDS2006 gemacht... wie krieg ich das Ding jetzt auf mein Formular? In meiner Tool-Palette is nix Neues zu sehen?



  • bei mir ist es unter dem reiter "ActiveX"



  • Mir der ActiveX WinMediaPlayer- Kiste hatte ich ähnliche Fehler.

    Vor dem deleten habe ich ein TWinMediaPlayer->Stop() gemacht, damit war der Fehler beim Beenden weg.

    Oder :
    TWinMediaPlayer->Stop();
    TWinMediaPlayer->Cancel();
    TWinMediaPlayer->FileName="";

    Irgendwie hängt der Mediaplaer nach dem Abspielen immer noch an der Datei.
    (Die lässt sich z.B. nicht von Disk löschen, wenn die vorher bgespielt wurde.

    Gruss
    Frank

    PS: Anstelle TWinMediaPlayer muss natürlich der benutzte Instanzname der Komponente stehen



  • janga schrieb:

    Bei mir ist es unter dem Reiter "ActiveX"

    Als letzten Schritt beim Importieren im BDS2006 soll ich immer angeben, ob die Unit nur erstellt oder auch zum aktiven Projekt zugefügt werden soll... ich habe beide Varianten getestet ... Rien ne va plus. Es erscheint keine neue Kategorie ActiveX in der KomponentenPalette. 😞



  • DerAltenburger: danke auch dir für deine hilfe. sowas versuche ich bereits. kennst du dich da genauer aus? leider finde ich keine bechreibung der klasse oder methoden. es gibt ja auch controls->stop().

    Kolumbus: danke dir für deine aktive mithilfe 🙂 wirklich sehr nett. aber lass gut sein. wenn du allerdings einfach für dich nun diesen activex wrapper haben willst, würde ich dir natürlich gerne helfen ihn zu installieren. leider weiss ich nicht viel über BDS2006. aber wenn du activex importieren kannst, muss es doch auch gehen. hast du jeden reiter abgeschaut und dort ist kein TWindowsMediaPlayer vorhanden?


Anmelden zum Antworten