Ich habe diese C++ Builder 2009 App. Es ist nicht verzweifelt - es ist eine Demo, aber es bringt mich zu Scotch. Ich bin jetzt so voll Single Malt, dass ich um Hilfe bitten muss.Stapelüberlauf (!) Beim Versuch, einen benutzerdefinierten Meldungshandler einzurichten
Diese App hat eine Hauptform und einige andere Sachen, die alle funktionieren. Ich habe keinen Grund zu denken, dass irgendetwas daran falsch ist. Ich fügte ein anderes Formular hinzu, 'TfoPNGload', und fügte ein paar Komponenten hinzu - nichts Ungewöhnliches. Ich habe es aus der Liste der automatischen Erstellung entfernt, damit Instanzen bei Bedarf erstellt werden können.
Als Test plonked ich einen Speedbutton auf dem Hauptformular und im Klick, eine Instanz der 'TfoPNGload' Form und Show() ed es erstellt:
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
myPNGform=new TfoPNGload(NULL);
myPNGform->Show();
}
Dieser feinen auch gearbeitet - Ich klicke auf den Knopf, ein Formular tauchte auf.
Alles ist normal.
Ich habe einen Nachrichten-Handler hinzugefügt und die Dinge wurden abnormal, noch bevor ich irgendwelche Nachrichten gesendet habe. Ich habe eine Funktion und das Makro Dingen es einen Message-Handler zu machen:
class TfoPNGload : public TForm
{
__published: // IDE-managed Components
TImage *Image1;
TPanel *Panel1;
TSpeedButton *SpeedButton1;
TTimer *tiSlideShow;
TLabel *Label1;
void __fastcall tiSlideShowTimer(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private:
PNGload *myLoad;
void __fastcall filesLoaded(TObject *Sender);
protected:
public: // User declarations
__fastcall TfoPNGload(TComponent* Owner);
MESSAGE void __fastcall WMAPP(TMessage& msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_APP, TMessage, WMAPP)
END_MESSAGE_MAP(TfoPNGload)
vector<PNGtask*> *PNGresult;
int vecSize;
};
Dann, wenn ich auf der Schaltfläche geklickt, das Formular zu erstellen, ich öffnet die klassische ‚Stack-Überlauf‘ messagebox!
Wenn ich die Makros auf Kommentar:
// BEGIN_MESSAGE_MAP
// MESSAGE_HANDLER(WM_APP, TMessage, WMAPP)
// END_MESSAGE_MAP(TfoPNGload)
..Die Form erstellt wird einfach gut!
Es ist nicht so, als würde ich noch irgendwelche Nachrichten posten - nur die Verarbeitung der Makros scheint den Überlauf bei der Formularerstellung zu erzeugen. Die WMAPP-Funktion ist sowieso leer.
Wer hat so etwas gesehen oder besser noch repariert?
Wenn Push kommt, habe ich eine Umgehungslösung - mit den gleichen Makros in der Hauptform funktioniert, so dass ich stattdessen meine Sachen dort posten und dann in das Formular "TfoPNGload" aufrufen. Es würde wahrscheinlich funktionieren, aber es macht ein Chaos meiner Code-Struktur, die TBH, schwierig genug ist, zu folgen, wie es ist: ((
Rgds, Martin
Können Sie alle Makros verarbeiten? –
@KerrekSB - als ich dies schrieb/posten wusste ich, dass jemand das sagen würde: ((OK, ich werde mir die Makros ansehen und vielleicht posten - ich kann C++ machen, aber ich bin kein Guru Level :( –
Warum machen Sie Ihren Compiler nicht die Arbeit - lassen Sie ihn nur die Vorverarbeitung durchführen und filtern Sie den relevanten Teil heraus Schauen Sie zumindest ob der Konstruktor sich nicht rekursiv selbst aufruft –