IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

un autre probl�me de compilation bloquant


Sujet :

C++/CLI

  1. #1
    Membre extr�mement actif
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2008
    Messages
    1 022
    D�tails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 022
    Par d�faut un autre probl�me de compilation bloquant
    bonjour. Je cherche a avoir sous debug la chaine des erreurs sur l �dition des erreurs de sql.
    j'ai le code suivant:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    	       char ErrorString[2048];
    		std::string ErrorStr;
    		std::string terme1;
    		std::string terme2;
    		std::string terme3;
    		std::wstring wsName;
    		char* ErrorT;
    		const wchar_t* chars;
     
    			terme1 = "Index #";
    			terme2 = "\n";
    			terme3 = "Error: ";
    			System::String^ ErrorText = exception->Message;
    			chars = (const wchar_t*)(Marshal::StringToHGlobalUni( ErrorText)).ToPointer();
    			wsName.append( chars);
    			ErrorT = CStrConv::awcstombs( (wchar_t*)chars);
    			Marshal::FreeHGlobal(IntPtr((void*)chars));
    			ErrorStr = terme1 + terme2 + terme3;
    			ErrorString = (const char*)ErrorStr.c_str(); // line 202
    			ErrorStr += ErrorT + terme2;
    			ErrorString[200] = (char*)ErrorStr.c_str(); // line 204
    			char* final_err_Buff = ErrorString;
    			int j = 0;
    			for(int i = 0; i > 2048; i = i + 200)
    			{
    				j++;
    				switch( j)
    				{
    					case 1:
    						p1 = final_err_buff;
    						break;
    					case 2:
    						p2 = &final_err_buff[100];
    						break;
    					case 3:
    						p3 = &final_err_buff[200];
    						break;
    					case 4:
    						p4 = &final_err_buff[300];
    						break;
    					case 5:
    						p5 = &final_err_buff[400];
    						break;
    					case 6:
    						p6 = &final_err_buff[600];
    						break;
    					case 7:
    						p7 = &final_err_buff[700];
    						break;
    					case 8:
    						p8 = &final_err_buff[800];
    						break;
    					case 9:
    						p9 = &final_err_buff[900];
    						break;
    					case 10:
    						p10 = &final_err_buff[1000];
    						break;
    					default:
    						break;
    				}
    			}
    			CStrConv::StrFreeA( ErrorT);
    			edit( (char*)ErrorString);
    	}
    et la compilation donne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManagerM.cpp(302): error C2440: '='*: impossible de convertir de 'const char *' en 'char [2048]'
    1>          Aucune conversion en types tableau, même s'il y a des conversions en références ou en pointeurs de tableau
    1>..\..\..\..\DBMS\DBMSManager\src\InterbaseManagerM.cpp(304): error C2440: '='*: impossible de convertir de 'char *' en 'char'
    1>          Aucun contexte dans lequel cette conversion est possible

  2. #2
    Membre extr�mement actif
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2008
    Messages
    1 022
    D�tails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 022
    Par d�faut La solution
    Bonjour,
    La solution est ci dessous:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    	void CInterbaseManagerM::Display( Exception^ exception)
    	{
    	    char ErrorString[2048];
    		std::string ErrorStr;
    		std::string terme1;
    		std::string terme2;
    		std::string terme3;
    		std::wstring wsName;
    		char* ErrorT;
    		const wchar_t* chars;
                    char* final_err_Buff;
    		int len;
     
    			terme1 = "Index #";
    			terme2 = "\n";
    			terme3 = "Error: ";
    			System::String^ ErrorText = exception->Message;
    			chars = (const wchar_t*)(Marshal::StringToHGlobalUni( ErrorText)).ToPointer();
    			wsName.append( chars);
    			ErrorT = CStrConv::awcstombs( (wchar_t*)chars);
    			Marshal::FreeHGlobal(IntPtr((void*)chars));
    			ErrorStr = terme1 + terme2 + terme3;
    			len = ErrorStr.size();
    			ErrorString[0] = (char)ErrorStr.c_str();
    			ErrorStr += ErrorT + terme2;
    			ErrorString[len + 1] = (char)ErrorStr.c_str();
    			final_err_Buff = ErrorString;
    			int j = 0;
    			for(int i = 0; i > 2048; i = i + 200)
    			{
    				j++;
    				switch( j)
    				{
    					case 1:
    						p1 = final_err_buff;
    						break;
    					case 2:
    						p2 = &final_err_buff[100];
    						break;
    					case 3:
    						p3 = &final_err_buff[200];
    						break;
    					case 4:
    						p4 = &final_err_buff[300];
    						break;
    					case 5:
    						p5 = &final_err_buff[400];
    						break;
    					case 6:
    						p6 = &final_err_buff[600];
    						break;
    					case 7:
    						p7 = &final_err_buff[700];
    						break;
    					case 8:
    						p8 = &final_err_buff[800];
    						break;
    					case 9:
    						p9 = &final_err_buff[900];
    						break;
    					case 10:
    						p10 = &final_err_buff[1000];
    						break;
    					default:
    						break;
    				}
    			}
    			CStrConv::StrFreeA( ErrorT);
    			edit( (char*)ErrorString);
    	}

  3. #3
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Wow, c'est un beau bordel.
    Tu utilises pourtant Visual 2010 ou sup�rieur, non?
    Es-tu s�r que marshal_as ne marche pas? C'est fait pour ce genre de truc!

    Et si marshal_as ne marche pas, fais-toi au moins une fonction pour convertir entre System::String^ et std::wstring ou std::string!
    Tu ne devrais pas avoir � manipuler StringToHGlobalXxx() � chaque fois!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre extr�mement actif
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2008
    Messages
    1 022
    D�tails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 022
    Par d�faut La solution
    ma marshal que j'utilise r�pond r�guli�rement j'ai trouv� ce code sur le net et il marche. Je n'ai jamais trouv� comment marshal_as marche

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    N'avais-je pas fini par poster un exemple de projet utilisant marshal_as dans un des threads?

    Sinon, au minimum, il te faut une fonction comme �a:
    Code C++/CLI : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    std::string ToCppStringA(System::String^ s)
    {
    	std::string ret;
    	System::IntPtr hnd = System::Runtime::InteropServices::StringToHGlobalAnsi(s);
    	try
    	{
    		ret = static_cast< char const * >(hnd.ToPointer());
    	}
    	finally { System::Runtime::InteropServices::FreeHGlobal(hnd); }
    	return ret;
    }
     
    std::wstring ToCppStringW(System::String^ s)
    {
    	std::wstring ret;
    	System::IntPtr hnd = System::Runtime::InteropServices::StringToHGlobalUni(s);
    	try
    	{
    		ret = static_cast< wchar_t const * >(hnd.ToPointer());
    	}
    	finally { System::Runtime::InteropServices::FreeHGlobal(hnd); }
    	return ret;
    }
    Et ne plus jamais utiliser ces StringToHGlobalXxxx en dehors de ces deux fonctions.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre extr�mement actif
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2008
    Messages
    1 022
    D�tails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 022
    Par d�faut J'ai regard� ton code
    J'ai regard� ton code avec attention
    Je ne vois pas ce qu'il apporte par rapport au mien

  7. #7
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Il regroupe toute la partie "dangereuse" l� o� le code qui appelle les fonctions n'a pas besoin d'y �tre expos�. Du coup, tu n'as plus � t'inqui�ter de la gestion de la m�moire si tu fais simplement std::string maString = ToCppStringA(uneChaineManagee);.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre extr�mement actif
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2008
    Messages
    1 022
    D�tails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 022
    Par d�faut bon
    bon j'ai pris note

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 0
    Dernier message: 05/12/2014, 17h42
  2. probl�me de compil devc++ socket
    Par stefdem dans le forum Autres �diteurs
    R�ponses: 2
    Dernier message: 11/12/2003, 11h33
  3. R�ponses: 1
    Dernier message: 29/10/2003, 12h16
  4. Probl�me de compilation de la DLL du XMLRad
    Par [DreaMs] dans le forum XMLRAD
    R�ponses: 2
    Dernier message: 16/04/2003, 16h46
  5. R�ponses: 1
    Dernier message: 27/05/2002, 01h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo