none
Convertir une System::String en std::wstring RRS feed

  • Question

  • Bonjour

    Je continue ma migration. Je sais maintenant charger le nom de fichier à traiter, mais je dois le passer à l'application qui est en mode non managé: C++ natif. J'ai donc déclaré des variables de type std:wstring pour récupérer les élément de la chaine reçue de la Form qui est en System::String

    J'ai eu beau regarder la définition de la String sur le site msdn je n'ai pas trouvé d'explication sur le mode de dialogue entre le type String et les variables du type standard

    J'ai essayé:

    wsFileToOpen = wsLocalString->System->Convert->ToString();

    bien entendu sans succès.

    .

    Ce serait cool d'en avoir


    Jean Noël Martin


    vendredi 4 mai 2012 08:18

Réponses

  • J'y vais de ce pas. Mais je ne trouve pas l'accès à la fenêtre memory

    Dans l'attente de fin de maquette, je clos ce thread  et je vais en ouvrir un autre sur les problèmes de comportement.


    Jean Noël Martin



    • Modifié JeanNoel53 samedi 5 mai 2012 08:17
    • Marqué comme réponse JeanNoel53 samedi 5 mai 2012 08:17
    vendredi 4 mai 2012 16:14

Toutes les réponses

    • Proposé comme réponse Ciprian Duduiala vendredi 4 mai 2012 12:24
    • Non proposé comme réponse JeanNoel53 vendredi 4 mai 2012 17:20
    vendredi 4 mai 2012 11:22
    Modérateur
  • bonjour

    J'ai donc codé:

                                    pin_ptr<const wchar_t> wch;
    				wsLocalString = openFileDialog2->FileName;
    				wch = PtrToStringChars( wsLocalString);
    				wsFileToOpen = *wch;
    				// Insert code to read the stream here.
    				myStream->Close();

    et au résultat j'ai dasn la chaine System::String wsLocalString = "D:\usr......doc"; ce qui doit être obtenu

    dans wch j'ai vu uniquement le 1° char D, je n'ai pas pu voire au débugger *wch

    et dans wsFileToOpen j'ai "[][]D"

    J'ai d'autre part codé l'autre solution

                    wsLocalString = openFileDialog2->FileName;
    	        using namespace Runtime::InteropServices;
                    const wchar_t* chars = (const wchar_t*)(Marshal::StringToHGlobalUni( wsLocalString)).ToPointer();
                    wsFileToOpen.append( chars);
                    Marshal::FreeHGlobal(IntPtr((void*)chars));
    		// Insert code to read the stream here.
    		myStream->Close();

    la j’ai toujours le même résultat dans wsLocalString, jai le même résultat dans chars mais je n'ai pas le résultat dans wsFileToOpen

    et j'ai essayé

    wsFileToOpen = L"Essai d'écriture dans la variable globale";

    et  wsFileToOpen est toujours n'importe quoi: nous avons donc une difficulté à adresser les variables globales

    donc nous savons convertir une System::String en wchar_t*.

    Il nous reste à savoir comment écrire dans une variable globale. J'ai placé dans le programme deux écritures de constantes et aucune n'a été prise en compte!!!

    Je pense donc que la question est à moitié résolue. il va falloir continuer.


    Jean Noël Martin




    vendredi 4 mai 2012 13:54
  • Vous vous faites des nœuds au cerveau. ;-)

    Une variable globales, c'est une variable, si vous ne voyez pas ce que vous voulez dans les outils, ce n’est pas parce qu’elle est globale, c'est que c'est une limitation d'affichage des outils de débugging. Que la variable soit globale ou pas, cela ne change rien.

    Je pense que tout fonction mais que vous utiliser mal les outils de debugging.

    Pour en être sûr, plutôt que de passer par les fenêtres watch/espion, utilisez les vues memory et regardez vous-même le contenu de la mémoire.

    Je pense que les routines d'affichage des fenêtres "espion" ne prennent pas en compte le fait que la chaine est UNICODE et s'arrêtent donc au premier octet à "0" au lieu de continuer jusqu'au DOUBLE "0" de la normalisation UNICODE.

    Pouvez-vous infirmer ou confirmer mes hypothèses en regardant dans une fenêtre memory le contenu de la mémoire pointé par vos pointeurs nus natifs ?


    Paul Bacelar, Ex - MVP VC++

    vendredi 4 mai 2012 16:12
    Modérateur
  • J'y vais de ce pas. Mais je ne trouve pas l'accès à la fenêtre memory

    Dans l'attente de fin de maquette, je clos ce thread  et je vais en ouvrir un autre sur les problèmes de comportement.


    Jean Noël Martin



    • Modifié JeanNoel53 samedi 5 mai 2012 08:17
    • Marqué comme réponse JeanNoel53 samedi 5 mai 2012 08:17
    vendredi 4 mai 2012 16:14