Aktuellen Dateipfad auslesen *Nicht von der Executable File*



  • Erstmal Danke für die schnelle Antowrt.

    Damit habe ich es auch schon versucht gehabt.

    Meine main Funktion:

    void main(array < String^>^ args)
    {
    	String^ Sbuffer = args[0];
    
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false);
    	winforms_csv_to_codesys::mainForm form;
    	Application::Run(%form);
    }
    

    Der Pfad + der Dateiname sollte doch das 0te Array von args sein.

    Jedoch bekomme ich den managed String nicht unmanaged string umgewandelt.
    Es stürzt dabei das Programm ab (msclr::interop::marshal_asstd::string()).

    Auch habe ich von deiner geposteten Seite den for each Befehl ausprobiert und versucht das Array in eine TextDatei zu schreiben. Diese war danach leer.

    Gruß



  • #include <msclr\marshal_cppstd.h>
    
    #include <vector>
    #include <string>
    #include <iostream>
    
    using namespace System;
    
    int main( array< System::String^ > ^ args )
    {
    	std::vector< std::string > args_vector( args->Length );
    
    	for( int i = 0; i < args_vector.size(); ++i ) {
    
    		args_vector[ i ] = msclr::interop::marshal_as<std::string>( args[ i ]->ToString() );
    		std::cout << args_vector[ i ] << '\n';
    	}
    }
    

    funktioniert toll.



  • Beim Debuggen sieht man dass der Vector komplett leer ist.

    Er geht nicht in die for-Schleife.



  • Was hast denn in die Registry eingetragen? Scheinbar bekommst ja keine Argumente übergeben ...



  • Registry Win10:

    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Current\Version\Explorer\FileExts\

    Neu Hinzugefügt:
    \.ibcproj
    Standard = Leer

    \.ibcproj\OpenWithList
    Standard = Leer
    a = IBCodegenerator.exe //Zeichenfolge
    MRUList = a //Zeichenfolge

    \.ibcproj\OpenWithProgids
    Standard = Leer
    IBCodegenerator.ibcproj = 0 0 0 0 //Binär

    Ich arbeite auf mehreren Windows. Bei Windows 7 wurde unter HKEY_CLASSES_ROOT alles angelegt.

    Aber auch ohne Registry Veränderung sind meine Argumente leer.
    Glaube kaum dass es daran liegt.



  • DD1993 schrieb:

    Aber auch ohne Registry Veränderung sind meine Argumente leer.
    Glaube kaum dass es daran liegt.

    Ich auch nicht, bei mir tuts nämlich wie es soll.



  • Dann wird irgendwas in den Projekt Eigenschaften anders eingestellt sein..
    Ich benutze VS2013.



  • Bist Du ganz, ganz, ganz sicher, daß die jeweils aktuell gebaute .exe aufgerufen wird, wenn du ein .ibcproj aus dem Explorer öffnest? Schau doch lieber mal mit Process Explorer nach.



  • Ja, im Process Explorer wird der Pfad zur aktuellen .exe angegeben.

    Habe ich auch mit GetModuleFileName() heute morgen bereits bemerkt.



  • Ok es liegt an dem Registry Eintrag.

    Ich hab mal meinen eigenen Eintrag aus der Reg entfernt, dann die .ibcproj mit meinem Programm geöffnet und schon wurde das Argument übergeben.

    So kann manchmal Zeit draufgehen...

    PS:

    Wenn jemand mit InstallShield arbeiten sollte, dann unter "File Extensions", "Arguments" "%1" eintragen.


Anmelden zum Antworten