Call to undefined function 'ShellExecute' - Funktion manchmal unbekannt? [gelöst]



  • Hmmm... Das könnte ich ja testen... Habe erstmal das hier gefunden:

    #define WIN32_LEAN_AND_MEAN    // Exclude rarely-used stuff from Windows headers
    

    d.h. selten genutzte Header werden weggelassen!? Und deswegen war das Problem gelöst, nachdem ich die shellapi.h explizit eingebunden habe, weil das Makro (wenn es manchmal definiert war) dafür gesorgt hat, dass shellapi.h nicht mit eingebunden wurde!?
    Könnte ich das denn jetzt testen, indem ich das Makro selbst definiere?
    Kann man auch etwas schreiben um ein evtl. definiertes Makro zu "undefinieren"?

    Edit: Wie kann es überhaupt sein, dass ein solches Makro mal definiert ist und mal nicht??



  • Hallo Gemeinschaft,

    hat wirklich niemand mehr Antworten auf die Fragen im meinem letzten Post? Mich interessiert das ungemein!

    MfG



  • Hallo

    Das ist dann eher Stoff fürs WinAPI-Forum.

    bis bald
    akari



  • Hallo akari,

    gut, dann mach ich nen neuen Thread im WinApi-Forum draus, Danke.

    MfG



  • Kolumbus schrieb:

    Nun kommt es öfter vor, dass ich in den Optionen des dazugehörigen Projekts unter Compileroptionen zwischen "Voll debuggen" und "Endgültige Version" umschalte.

    Ich weiss jetzt nicht ob das die Lösung für dich ist, aber beim Umschalten von meinem Projekten (ich benutze MS VS6.0) habe ich festgestellt, daß nur die Dateien neu kompiliert werden, die ich auch seit der letzten Compilierung bearbeitet habe. Tritt jetzt der Fall auf, daß in den bereits kompilierten Dateien Präprozessorbefehle sind die sich auf die verschiedenen Release/Debug Versionen beziehen werden die nicht berücksichtigt, Abhilfe schafft hier ein komplette Komilierung aller Dateien.



  • Also -ähm- alles folgt einer Logik und das Makro "mal definiert sind und mal nicht" gibt es so nicht.

    Du kannst es löschen, via #undef und es besteht die Definition nur in einer Headerdatei. Damit ist die Definition auch nur in der Headerdatei bzw. in Code-Dateien vorhanden, die den Header inkluden.



  • auch keinen Plan schrieb:

    ... Abhilfe schafft hier ein komplette Kompilierung aller Dateien.

    Ich compilere immer mit "Projekt->Erstellen", dabei gehe ich davon aus, dass Alles komplett neu compiliert wird. Aber Danke für die Idee!

    CodeFinder schrieb:

    Also -ähm- alles folgt einer Logik und das Makro "mal definiert sind und mal nicht" gibt es so nicht.

    Wie erklärt die Logik dann mein Problem aus dem Eröffnungspost, welches durch explizites Einbinden der shellapi.h gelöst werden konnte?!?



  • Kolumbus schrieb:

    Wie erklärt die Logik dann mein Problem aus dem Eröffnungspost, welches durch explizites Einbinden der shellapi.h gelöst werden konnte?!?

    Vielleicht wurde die shellapi.h durch ein anderes Unit mal in den präcompilierten Header aufgenommen und mal nicht, je nachdem, welches Unit noch aktuell war und welches neu kompiliert werden mußte?



  • Hmm, ich denke ich weiß was du meinst audacia und habe nochmal Folgendes getestet (ich beschreibe jeden einzelnen Schritt):

    * Projekt geöffnet und erstellt ("ALT + P" und dann "E") => keine Fehlermeldungen

    • #include <shellapi.h> auskommentiert, "Alles speichern" gedrückt und Projekt erstellt => keine Fehlermeldungen
      * Projekt->Optionen unter Compiler Optionen von "Endgültige Version" auf "Voll Debuggen" gestellt, "Alles speichern" gedrückt und Projekt erstellt => Call to undefined function 'ShellExecute'
      * ShellExecute()-Zeile auskommentiert, "Alles speichern" gedrückt und Projekt erstellt => keine Fehlermeldungen
      * ShellExecute()-Zeile wieder aktiviert, "Alles speichern" gedrückt und Projekt erstellt => keine Fehlermeldungen
      * Projekt->Optionen unter Compiler Optionen von "Voll Debuggen" auf "Endgültige Version" gestellt, "Alles speichern" gedrückt und Projekt erstellt => Call to undefined function 'ShellExecute'
    • #include <shellapi.h> wieder aktiviert, "Alles speichern" gedrückt und Projekt erstellt => keine Fehlermeldungen

    Das bedeutet also möglicherweise, dass ohne #include <shellapi.h> die shellapi.h nur eingebunden wird, wenn ShellExecute()-Zeile neu in den Code aufgenommen / verändert wurde?!?

    Ich werd' mich mal über die vorcompilierten Header schlau machen...



  • audacia schrieb:

    Vielleicht wurde die shellapi.h durch ein anderes Unit mal in den präcompilierten Header aufgenommen und mal nicht, je nachdem, welches Unit noch aktuell war und welches neu kompiliert werden mußte?

    Ich habe das Problem mit den undefinierten Funktionen gerade wieder. Wenn Ich zw. Debug / Endgültig switche treten Fehlermeldungen auf. Ändere ich die betroffene Unit in IRGENDEINER Weise (zB. Hinzufügen ein Semikolon) und compilieren gleich wieder, sind die Fehlermeldungen weg.
    Auch wenn ich nach dem ersten Compilieren gleich wieder compiliere, sind die Fehlermeldungen weg - als ob nach den Fehlermeldungen die betroffenen Units als "verändert" betrachtet werden... Ist das so?



  • Kolumbus schrieb:

    Ist das so?

    Es sollte eigentlich nicht.

    Aber ich dachte, du benutzt jetzt C++Builder 2006? 😉



  • audacia schrieb:

    ...Aber ich dachte, du benutzt jetzt C++Builder 2006? 😉

    Geht ja los... nicht anschreien 🤡
    ⚠ Bitte nicht hetzen!
    Ich will das nicht "zwischen Tür und Angel" machen!

    audacia schrieb:

    Kolumbus schrieb:

    Ist das so?

    Es sollte eigentlich nicht. ...

    Dann verbuchen wir das mal unter "buggy"!



  • Kolumbus schrieb:

    ⚠ Bitte nicht hetzen!
    Ich will das nicht "zwischen Tür und Angel" machen!

    Ist ja gut 😃


Anmelden zum Antworten