none
trouver le path en cours d'exécution RRS feed

  • Question

  • Je voudrais savoir comment trouver le path en cours d'exécution. J'ai trouvé System::IO::Path mais le compilateur ne l'aime pas

    J'ai essayé:

                using namespace System::IO;
                // static String^ GetDirectoryName(    String^ path)
                String^  path;
                // Let's try from the PATH and System directories
                path = Path.GetDirectoryName(    path);

    sans succès


    Jean Noël Martin





    • Modifié JeanNoel53 vendredi 21 septembre 2012 08:55
    vendredi 21 septembre 2012 07:36

Réponses

Toutes les réponses

  • et je suis repartie en arrière sur la base d'une lecture plus approfondie de la documentation.

    j'ai donc codé:

    			using namespace System::IO;
    			// static String^ GetDirectoryName(	String^ path)
    			String^  path;
    			// Let's try from the PATH and System directories
    			path = Path;

    et le compilateur m'a répondu:

    1>d:\usr\memoria\dev\dbms\onlinedbmanager\ibpp-2-5-3-1-src\core\_ibpp.cpp(207): error C2275: 'System::IO::Path' : utilisation non conforme de ce type comme expression
    1>          c:\program files\reference assemblies\microsoft\framework\.netframework\v4.0\mscorlib.dll : voir la déclaration de 'System::IO::Path'


    Jean Noël Martin

    vendredi 21 septembre 2012 09:53
  • Déjà, c'est le genre de besoin qui sent pas bon une conception soignée.

    Vous êtes sur que c'est le compilateur et pas à l'exécution ???

    Comme d'habitude, vous prenez une méthode au pif, sans même prendre la peine de lire ne serais-se que la première phrase de la documentation.

    Directory.GetCurrentDirectory

    http://msdn.microsoft.com/fr-fr/library/system.io.directory.getcurrentdirectory.aspx


    Paul Bacelar, Ex - MVP VC++

    • Marqué comme réponse JeanNoel53 lundi 24 septembre 2012 10:42
    vendredi 21 septembre 2012 10:11
    Modérateur
  • Dans  la documentation ci dessus j'explique que je n'ai pas pris la bonne fonction au départ. mais je demande ce que je dois faire pour faire accepter la deuxième implémentation.

    En fait mon besoin est de comprendre pourquoi le LoadDirectory renvoie une valeur nulle alors que les dll sont dans le répertoire du projet (en l’occurrence SpécificationLoader). Je mets le code en dessous.

                            using namespace System::IO;
                            // public ref class Path
                            String^  path;
                            // Let's try from the PATH and System directories
                            path = Path;
                            mHandle = LoadLibrary((LPCWSTR)"fbclient.dll");

    en fait d'après ce que je sais le path est dans le répertoire du projet, c'est du moins ce qui se passe au chargement du fichier ini.

    Et j'ai trouvé ca (definition que j'ai codé mais qui n'est pas accepté)

    // property String^ Path { String^ get (); void set (String^ value); }
    String^  path;
    // Let's try from the PATH and System directories
    path = Path::get( );
    mais c'est peut être par ce que la syntaxe de Path::get() n'est pas la bonne.


    Jean Noël Martin




    • Modifié JeanNoel53 vendredi 21 septembre 2012 14:28
    vendredi 21 septembre 2012 10:21
  • J'ai trouvé ça mais ça ne donne rien à l’exécution.

                            using namespace System::DirectoryServices;
    			DirectoryEntry^ objDE;
    			// public ref class Path
    			// property String^ Path { String^ get (); void set (String^ value); }
    			String^  path;
    			// Let's try from the PATH and System directories
    			objDE = gcnew DirectoryEntry( path);
    et le handler est toujours nulle alors que la DLL est dans le répertoire de travail


    Jean Noël Martin


    • Modifié JeanNoel53 vendredi 21 septembre 2012 14:50
    vendredi 21 septembre 2012 14:46
  • "le répertoire du projet ", c'est quoi ce truc ?

    Pour moi, c'est le répertoire qui contient le fichier projet (.vcxproj) d'un projet, ce n'est ni le répertoire contenant la solution, ni le répertoire contenant l'exécutable, ni le répertoire de travail du processus en cours d'exécution.

    Il faudrait déjà que vous ne confondiez pas tous ces répertoires (et d'autres) pour que votre mécanisme de chargement soit un minimum fiable. 

    Ce n'est qu'en ayant une vue précise des différents répertoires que vous pourrez correctement interpréter la documentation.

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v=vs.85).aspx

    Mais avant de vous plonger dans la documentation (enfin j'y crois pas trop vue que vous faite toujours des trucs à l'arrache au vue de toutes vos questions sur ce forum), il faut commencer par supprimer ces CAST tout pourris qui blanquent d'énormes bévues.

    Vous donnez à une primitive voulant une chaine au format UNICODE une pauvre chaine ASCII.

    Déjà, estimez vous heureux que votre programme ne se plante pas comme une bouse.

    Donc supprimer moi votre variable "path" à la noix et fournissez correctement les informations à la primitive LoadLibrary :

     mHandle = LoadLibrary(_T("fbclient.dll"));


    Paul Bacelar, Ex - MVP VC++

    vendredi 21 septembre 2012 18:27
    Modérateur
  • J'ai code L"fbclient.dll" et ca marche.merci.

    Jean Noël Martin

    vendredi 21 septembre 2012 18:33
  • Utilisez _T et pas L, car vous appelez LoadLibrary et non LoadLibraryW.

    Soit votre code n'est qu'ASCII et c'est LoadLibraryA et des chaines entre "",

    Soit votre code n'est qu'UNICODE et c'est LoadLibraryW et des chaines avec L comme préfixe

    Soit votre code est aussi bien ASCII qu'UNICODE et c'est là qu'il faut utiliser LoadLibrary et _T.

    Si vous n'appliquez pas correctement ces principes, votre code partira en sucette avec une simple modification dans les paramètres du projet (comme le fait de généré un exécutable ASCII et plus UNICODE). Votre projet devrait être compilable aussi bien pour cible Win95/98/ME que Windows2008 ou Win8.

    Respectez les conventions, SVP.


    Paul Bacelar, Ex - MVP VC++

    • Marqué comme réponse JeanNoel53 samedi 22 septembre 2012 08:42
    • Non marqué comme réponse JeanNoel53 samedi 22 septembre 2012 08:48
    vendredi 21 septembre 2012 19:01
    Modérateur
  • mais le compilateur refuse path.append( _T"fbclient.dll"); avec le diagnostic _T symbole non défini.

    Jean Noël Martin

    samedi 22 septembre 2012 08:50
  • C'est que vos precompiled headers ne contient pas, directement ou indirectement "tchar.h". Vous n'auriez pas un un petit ménage à l'aveuglette ?

    Paul Bacelar, Ex - MVP VC++

    lundi 24 septembre 2012 09:38
    Modérateur