Name des Projekts ermitteln



  • Hallo

    Für Fehlermeldungen benutze ich die Makros __FILE__ und __LINE__. Nun sollte ich noch zusätzlich den Projektnamen ermitteln. Ich habe eine Projektmappe mit mehreren libs die zu einer DLL hinzugelinkt werden. Nun sollte ich wissen wenn ein Fehler auftritt aus welcher Lib der Fehler kommt. Also so was wie __PROJECT__. Gibt es aber nicht wie kann ich das den ermitteln

    Gruß

    MFC Man



  • #define __PROJECT__ "Project"
    

    bzw. da man ja defines mit führendem unterstrich den Compilerhesteller überlassen sollte halt was in der art:

    #define PROJECT_NAME "Project"
    

    Kannst du auch bei den Compileroptionen einstellen, aber ka, wie das genau bei
    Visual C++ geht...

    mfg Branleb



  • Danke für deine Antwort. Genau das habe ich auch so gehabt. Allerding bekomme ich dann die Warnung Makro-Neudefinition. Ich muss das Makro ja dann in jeder LIB definieren.



  • Google mal nach Standard Projekt-/Compilereinstellungen Makros Visual C++
    oder so ähnlich. Du kannst sicher irgendwo einstellen, dass das eben default bei neuen projekten ist.
    Und alte musste halt einmalig ändern, das das in den Compileroptionen gesetzt wird.
    Dann haste den stress mit den #defines nicht.

    mfg Branleb



  • Irgendwie suche ich nach dem falschen. Ich finde einfach nichts. Es würde mir ja schon reichen wenn ich wüßte wo ich die Markos definiere. Es müsste nicht bei allen neuen Projekte default sein, da ich es nur für bereits bestehende Projekte brauche. Ich weiß nur wo man defines macht die halt dann True sind wenn man sie definiert hat.



  • Wie ich herausbekommen habe ist es nicht möglich in den Compilereinstellungen irgendwelche Makros zu definieren denen man einen String zuweisen kann. Gibt es noch eine andere Möglichkeit, den Namen des Projekts im Code zu verwenden.



  • Es muss doch auch möglich sein die Makros von Visual Studio zu verwenden. Da gibt es ja ein Makro dass $ProjectName heißt. Wie man das allerdings verwendet kann ich dir auch nicht sagen vieleicht weiß das ja jemand anderes.


  • Mod

    Einfach bei den Präprozessor Definitionen

    PROJECT_NAME=$(ProjectName)
    

    eintragen.



  • Das funktioniert nicht. Wie schon geschrieben. $ProjectName erhalte ich dann nicht als String sondern als Variable.



  • Wie als Variable und nicht als String das habe ich jetzt nicht ganz verstanden.



  • Also einfaches Beispiel. Projekt heißt z.B. Nachrichtensender. Wenn ich nun in den Präprozessor Definitionen wie beschrieben das Makro setze PROJECT_NAME=$(ProjectName) und dann im Code dieses Makro verwende, also z.B. in einer Messagebox -> AfxMessageBox(PROJECT_NAME), dann erhalte ich den Fehler:

    error C2065: 'Nachrichtensender': nichtdeklarierter Bezeichner
    

    .

    Es wird nun also Nachrichtensender als Variable angenommen. Nicht aber als String so wie ich ihn benötige.

    Hier muss es doch eine Lösung geben oder?



  • Er meint dass er noch BOOST_PP_STRINGIZE verwenden müsste.
    Nö, meint er natürlich nicht, weil er nicht weiss dass es BOOST_PP_STRINGIZE gibt.

    Er meint einfach dass das Ding dann nicht unter Anführungszeichen steht, und weiss nicht, wie er es in einen String umwandeln kann.

    Anscheinend ist Google bedienen wirklich sehr schwer.



  • cout << BOOST_PP_STRINGIZE(hustbaer);
    

    Ausgabe:

    "unfreundlicher Zeigenosse"



  • Lieber Hustender Bär: eigentlich weiß ich das schon aber zum einen will ich kein Boost verwenden und zum anderen dachte ich es muss ja auch noch eine andere Lösung geben ohne zusätliche Makros im Code. Aber anscheinend nicht.


  • Mod

    MFC Man schrieb:

    Das funktioniert nicht. Wie schon geschrieben. $ProjectName erhalte ich dann nicht als String sondern als Variable.

    Meine Güte... etwas Denken kann helfen um Probleme zu lösen 🤡

    PROJECT_NAME=\"$(ProjectName)\"
    


  • Hallo

    Also geht doch, danke. Seit ihr heute alle mit dem falschen Fuss aufgestanden oder wieso so unfreundlich.



  • Martin Richter schrieb:

    MFC Man schrieb:

    Das funktioniert nicht. Wie schon geschrieben. $ProjectName erhalte ich dann nicht als String sondern als Variable.

    Meine Güte... etwas Denken kann helfen um Probleme zu lösen 🤡

    PROJECT_NAME=\"$(ProjectName)\"
    

    Cool, danke für den Hinweis!

    Dass man da " mit \ escapen kann wusste ich auch nicht. Und bin irgendwie nicht auf die Idee gekommen es zu probieren. Hab es aber auch in der Doku irgendwie nicht gefunden... da steht nur dass " einfach gefressen werden - was man auch, wenn man keine \ verwendet sehr schön beobachten kann...



  • MFC Man schrieb:

    Lieber Hustender Bär: eigentlich weiß ich das schon

    Achja natürlich.



  • Achja natürlich.

    Ich weiß es nachdem ich einen anderen Artikel hier him Forum gelesen habe. Der war sogar von dir. Du bist mein großes Vorbild.


  • Mod

    MFC Man schrieb:

    Also geht doch, danke. Seit ihr heute alle mit dem falschen Fuss aufgestanden oder wieso so unfreundlich.

    1. Smilie nicht berücksichtigt.
    2. Hättest Du auch mit dem Stringizing Operator (#) Dein Ziel erreicht.
    http://msdn.microsoft.com/en-us/library/7e3a913x(VS.80).aspx
    3. Ist ein Hinweis auf "Nachdenken" nie fehl am Platz, besonders wenn man die korrekte Antwort bereits erhalten hat und Nachdenken sowohl meine Lösung als auch die Präprozessor Lösung erbracht hätte. IMHO 🤡


Anmelden zum Antworten