none
system() DOS-Konsole RRS feed

  • Frage

  • Hallo,

    ich will mit
    #include<cstdlib>
    
    ...
    
    private: System::Void button1_Click
    (System::Object^  sender, System::EventArgs^  e) 
    {
    	system("editor.dll");
    }
    einen Editor öffnen den ich mit Visual Studio geschrieben habe,
    und die editor.exe Datei dann in editor.dll umbenannt habe.
    Wenn ich den Button anklicke öffnet sich der Editor,
    aber auch die DOS-Konsole(.../system32/cmd.exe)
    Kann man eine .dll auch ausführen ohne dass sich die DOS-Konsole
    mit öffnet?
    Geht das mit system() oder auch mit anderen Befehlen?

    Gruß

    Neuer_user
    Samstag, 25. Juli 2009 12:21

Antworten

Alle Antworten

  • hat keiner ne idee???
    Montag, 27. Juli 2009 11:19
  • 1. Eine DLL ist keine EXE! Und eine EXE wird nicht zur DLL weil Du sie so umbenennst.
    2. Verwende ShellExecute(Ex) oder CreateProcess
    Siehe auch http://blog.m-ri.de/index.php/2008/09/04/aufflackern-eines-konsolenfensters-bei-nutzung-system-und-_popen/
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    • Als Antwort vorgeschlagen Martin Richter Dienstag, 28. Juli 2009 20:25
    Dienstag, 28. Juli 2009 20:25
  • Hallo,
    1. Die Datei soll keine DLL sein, nur die Endung soll .dll sein. :)
    2. Werde ich mal ausprobieren.
    • Bearbeitet Neuer_user Donnerstag, 30. Juli 2009 16:19
    Donnerstag, 30. Juli 2009 16:13
  • Welche DLL braucht man für ShellExecute() und für CreateProcess?
    Sonntag, 2. August 2009 16:04
  • Was meinst Du mit welche DLL man benötigt?
    Welche Rolle spielt das für Dich?

    Beide Routinen gehören zum Grundinventar von Windows. Ansonsten schau in die MSDN Doku zu den Routinen, da steht wo diese implementiert sind:
    CreateProcess -> Kernel32.dll
    http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx
    ShelleExecute -> Shell32.dll
    http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Sonntag, 2. August 2009 18:33
  • Mit diesem Code
    ShellExecute(NULL , L"open", L"editor.dll", NULL, NULL, SW_SHOWNORMAL);
    kommen immer folgende Fehlermeldungen:
    error LNK2028: Nicht aufgelöstes Token (0A00000F) ""extern "C" struct HINSTANCE__ * __stdcall ShellExecuteW(struct HWND__ *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,int)" (?ShellExecuteW@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PB_W111H@Z)", auf das in Funktion ""private: void __clrcall appos::Form1::Form1_Load(class System::Object ^,class System::EventArgs ^)" (?Form1_Load@Form1@appos@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)" verwiesen wird.
    
    error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" struct HINSTANCE__ * __stdcall ShellExecuteW(struct HWND__ *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,int)" (?ShellExecuteW@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PB_W111H@Z)" in Funktion ""private: void __clrcall appos::Form1::Form1_Load(class System::Object ^,class System::EventArgs ^)" (?Form1_Load@Form1@appos@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)".
    
    fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
    Was mache ich falsch?
    Mittwoch, 5. August 2009 11:46
  • Du musst die Shell32.lib auch bei den Linker Optionen angeben.
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    • Als Antwort vorgeschlagen Martin Richter Mittwoch, 5. August 2009 13:26
    Mittwoch, 5. August 2009 13:26
  • Jetz kompiliert er ohne Fehler.
    Das Programm wird auch ausgeführt,
    aber wenn ich jetzt auf den Button zum Öffnen der Datei klicke
    tut sich nichts.
    Auch keine Exception o.ä.
    Mittwoch, 5. August 2009 18:32
  • Hat sich erledigt.
    Mit .exe als Dateiendung geht's.
    Danke für die Hilfe!
    • Als Antwort markiert Neuer_user Mittwoch, 5. August 2009 18:50
    • Tag als Antwort aufgehoben Neuer_user Montag, 24. August 2009 17:20
    Mittwoch, 5. August 2009 18:50
  • Wenn ich eine Datei mit einem String öffnen möchte und folgenden Code benutze
    ShellExecuteA(NULL, "open", (char const *)Marshal::StringToHGlobalAnsi(datei).ToPointer(), "", NULL, SW_SHOWNORMAL);
    gibt der Compiler folgende Fehler aus:

    error LNK2001: Nicht aufgelöstes externes Symbol ""extern "C" struct HINSTANCE__ * __stdcall ShellExecuteA(struct HWND__ *,char const *,char const *,char const *,char const *,int)" (?ShellExecuteA@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PBD111H@Z)".
    1>H:\projekte\Projects\BubbleBar\Release\BubbleBar.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    Montag, 24. August 2009 17:25
  • Du hast bei den Linker Optionen vergessen die entsprechende Library mit anzugeben.
    shell32.lib

    Diese Informationen findest Du immer in der MSDN unten bei den Angaben zur Kompatibilität und den Requierments.
    http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Dienstag, 25. August 2009 08:07