ShellExecute: Linker-Fehler



  • **Hallo,

    habe folgendes Problem:

    Ich bekomme beim Linken folgendes Quelltextes....**

    #pragma comment(lib, "user32.lib")
    #pragma comment(lib, "shell32.lib")

    #include "stdafx.h"

    using namespace std;

    void RunApplication(LPCTSTR FileName, LPCTSTR FileParam);

    int _tmain(int argc, _TCHAR* argv[])
    {
    unsigned int menuewahl = 0;

    do
    {
    cout << " Waehlen Sie eine Option:\n\n" << " [1] Hybrid\n" << " [2] Doppel\n\n";

    cout << " Wahl ([1,2]) = ";

    cin >> menuewahl;

    switch(menuewahl)
    {
    case 1:
    ShellExecute(0, _T("open"), _T("U:\\Visual Studio Data\\11082010_CANape_Startskript\\11082010_CANape_Startskript\\start.bat"), 0, 0, SW_SHOWNORMAL); break;
    case 2:
    cout << menuewahl; break;
    default:
    cout << "\n\n Der eingegebene Wert ist ungueltig! Die gueltigen Eingabewerte sind 1 und 2\n\n\n";
    }
    }
    while(menuewahl < 1 || menuewahl > 2);

    return 0;
    }

    diese Linker-Fehler:

    1>Linking...
    1>11082010_CANape_Startskript.obj : error LNK2019: unresolved external symbol __imp__ShellExecuteW@24 referenced in function _wmain
    1>U:\Visual Studio Data\11082010_CANape_Startskript\Debug\11082010_CANape_Startskript.exe : fatal error LNK1120: 1 unresolved externals

    **Woran könnte das liegen?

    Meine Entwicklungsumgebung:

    Visual Studio 2005 Express
    Projekt: Konsolenanwendung

    Vielen Dank schonmal!

    Grüße
    gommelz**



  • Hm, die Funktion liegt in der shell32.lib, aber die brauchst du eigentlich nicht explizit zu linken. Kann es sein, dass du in den Projekt-Settings unter Linker=>Eingabe "Standardbibliotheken ignorieren" auf "Ja" gestellt hast?

    EDIT: Ach sorry, du linkst die ja sogar explizit (wie gesagt, nicht nötig). Habe ich zunächst übersehen... Also bei mir funktioniert's, ob mit oder ohne pragma-Statement (ich weiß, hilft dir nicht wirklich 😉 ).



  • Danke fürs Durchschauen, aber war nur ein kleines Problem.

    Scheinbar muss man erst alle includes bearbeiten und dann erst die lib einbinden.
    Komisch... So geht's dann!

    Gruß



  • Vermutlich reicht es, die pragma-Anweisungen unter #include "stdafx.h" zu platzieren. Diese Zeile sollte immer die oberste sein.



  • Die includes müssen immer ganz oben stehen.



  • Omicron schrieb:

    Die includes müssen immer ganz oben stehen.

    Glaube ich kaum, dass dies eine generelle Regel ist. Ich finde auch ganz schnell Gegenbeispiele in unserem Source. Wie kommst du darauf?


Anmelden zum Antworten