lundi 4 mars 2019

Comment développer en C++ ?

Je cherche le meilleur moyen de développer en C++ car j'ai compris que les librairies graphiques comme DirectX ou plutôt Direct3D, OpenGL, VCL, FireMonkey et autres sont écrites en langage C++ et je cherche une bonne maitrise du temps réel avec mon application, quel choix faire pour développer en C++ ?

Et oui si vous faites du développement 3D C++ pour des gamers par exemple, vous serez amené à développer en Langage C++ alors j'ai moi même quelques expériences de ce langage mais aujourd'hui je suis perplexe devant les possibilités qui s'offrent à moi et je ne sais quelle option choisir alors faisons un tour rapide de toutes ces possibilités.

J'ai travaillé récemment avec Embarcadero dont j'ai fait une abondante critique. Il possède l'avantage de démarrer un développement rapidement bien plus qu'avec Visual Studio C++ MFC par exemple. Le scandale, c'est que Microsoft conserve MFC et n'a rien fait depuis donc si vous cherchez à instancier un nouveau projet avec Visual Studio vous allez tomber sur MFC ... Grrr pas bon, méchant les MFCs !

Qt/C++ est une bonne alternative, je n'y croyais pas mais c'est d'une prise en main rapide et les contrôles utilisateurs sont intelligents, ils permettent plein de choses rapidement, je vous le conseil.

Je lis cet article : Développez.com - Graphique

Le choix est large mais pas simple, la prise en main d'une librairie graphique c'est un investissement lourd. Moi je parlais des chaines de développement associée ici pas de chaîne mais alors comment cela se passe t-il ? Vous pouvez démarrer avec Eclipse.

Choix d'une application pour bien développer en C++

Que puis je faire avec Visual Studio ? Instancier un nouveau projet Windows Desktop - Assistant Windows Desktop :

Visual Studio un projet en Langage C++

Et Visual Studio me donne les choix suivants :

Visual Studio créer une application en C++

MFC and ATL

Je vous laisse avec la doc MSDN ... Et toutes ces vieilleries Microsoftiennes ...

What's New for Visual C++ in Visual Studio 2017

Si il y a encore du Nouveau en C++ sous Visual Studio 2017 ...

Microsoft - VCSamples - Visual Studio C++

On retrouve ATL CLR MFC plus d'autres exemples

Microsoft - Visual C++ Samples

On remonte encore plus haut dans les samples bien connus de Microsoft

Mais tout ceci ne nous aide pas beaucoup, je suis certain que nous sommes très très nombreux à regretter qu'il n'y ait pas d'alternative à MFC pour développer rapidement des application Desktop en C++. Depuis tout ce temps Microsoft aurait pu faire un effort.

Voilà, je tombe un peu là dans un trou à cause de Microsoft, je pensais trouver une bonne solution pour développer en C++ avec Visual Studio mais la solution moderne est sans doute ailleurs.

La solution moderne pour développer en C++ c'est très certainement Qt/C++.

Solution pour développer en C++

Aujourd'hui il existe une solution pour développer en C++ sans MFC, portable pour toutes les plateformes avec à la base une console et système de menu intelligent pour ajouter rapidement du code un test une fonctionnalité c'est le :

GitHub - Console C++ Starter Kit

Console C++ Starter Kit pour développer facilement en C++

Développez facilement en C++. Pas de MFC , pas de composants graphiques, juste avec une console et système de menus et un peu de code en langage C pour gérer la gestion de la mémoire et faire des Traces dans un display Trace le Reporter.

Venez nous rejoindre dans notre communauté Github.

jeudi 28 février 2019

MyString CPlusPlus Mes String en C++ StringFormat & StringSplit

StringFormat et StringSplit sont deux fonctions que l'on a toujours besoin d'avoir sous la main. Je me retrouve avec Embarcadero C++ Builder à devoir coder en C++, je tombe donc sur l'UnicodeString hérité de Delphi imaginez un peu mon désarrois.

Coder en C++ StringSplit et StrinFormat

Je l'avoue ça fait un peu mal, même si ce type est très utile sous Embarcadero, il vient du moyen âge ! Pour nous faciliter la vie, je souhaite donc vous livrer ici mes deux fonctions qui à mon goût, n'existent pas ni dans C++ Builder ni dans les STL.

Voici donc StringFormat et StringSplit les deux foncitons C++ qui manquent toujours à l'appel.

L'entête

#ifndef _MyStringH
#define _MyStringH

#include <iostream>
#include <conio.h>
#include <sstream>
#include <vector>
#include <string>


using namespace std;

// ---------------------------------------------------------------------------
// Mangement of Srting's Sizes

#define MAX_STRING 256
// ---------------------------------------------------------------------------
void StringFormat( UnicodeString &str, const char *format, ... );
vector<string> StringSplit( string s, string separator );
// ---------------------------------------------------------------------------
#endif

Corps des fonctions StringFormat et StringSplit en C++

//----------------------------------------------------------------------------
// Format String
//----------------------------------------------------------------------------

void StringFormat( UnicodeString &str, const char *format, ... )
{
   char buffer[ MAX_STRING ];
   va_list args;

   va_start( args, format );

   vsprintf( buffer, format, args );
   str = UnicodeString( buffer);
   perror( buffer );

   va_end( args );
}

//----------------------------------------------------------------------------
// Split string with separator
//----------------------------------------------------------------------------

vector<string> StringSplit( string s, string separator )
{
   size_t pos_start = 0, pos_end, delim_len = separator.length();
   string token;
   vector<string> res;
   while ( (pos_end = s.find( separator, pos_start )) != string::npos )
   {
      token = s.substr( pos_start, pos_end - pos_start );
      pos_start = pos_end + delim_len;
      res.push_back( token );
   }
   res.push_back( s.substr( pos_start ) );
   return res;
}

Utilisation des fonctions StringFormat et StringSplit en C++

UnicodeString b = "blabla";
double d = 2.033256;
StringFormat( b, "d = %.3f", d );
Edit1->Text = b;

//-----------------------------------------

int tab[ 4 ] = { 0, 0, 0, 0 };
string str = "0, 1,  2,  3";
string separator = ",";
vector<string> v = StringSplit( str, separator );
int j = 0;
for ( auto i : v )
{
  tab[ j++ ] = atoi( i.c_str() );
}

Conclusion

Vous pouvez adapter ces fonctions pour une autre chaîne de développement comme Qt ou Visual Studio C++ en utilisant CString à la place d'UnicodeString d'Embarcadero.

Voilà, la prochaine fois que je code en C++, je n'aurais pas à les réécrire ... ;-)


mardi 26 février 2019

Embarcadero 10.3 l'intellisense, l'autocomplétion ne fonctionnent plus

Je travaille avec la version Embarcadero 10.0.3 et la future release est arrivée, c'est la version Embarcadero C++ Builder 10.3 alors je l'installe mais au bout de quelques instant je me rend compte que l'autocomplétion et l'intellisence ne fonctionne plus alors qu'ils ont fonctionnés.

Embarcadero 10.3 - Bugs
Embarcadero 10.3 - Bugs
C'est désastreux plus rien ne fonctionne, déjà que cela ne fonctionnait pas fort alors là je suis pantois les bras m'en tombent. La plus part du temps, je développe avec Visual Studio mais il m'est arrivé de devoir utiliser Embarcadero pour satisfaire l'un ou l'autre de mes clients. Je ne suis pas sectaire, j'aime toutes les chaines de développement qui fonctionnent. J'ai utilisé Qt/C++ avec beaucoup de bonheur.

Mais là, Embarcadero me déçois avec cette nouvelle release v10.3 Modernize with RAD Studio 10.3
Est-ce parce que j'ai laissé la précédente release installée sur le même post ? Ce ne serait pas professionnel de la part d'Embarcadero alors que pourtant la licence n'est pas donnée croyez-moi.

Work Space ou Espace de Travail

C'est amusant comme Embarcdero est obligé de copier sur Visual Studio de Microsoft. Dans Visual Studio on peut faire plein de choses pour améliorer sa productivité notamment particulariser sont Espace de Travail en mettant les fenêtres que l'on souhaite où l'on souhaite.

Dans Embarcadero, on peut faire quasiment faire la même chose mais c'est le quasiment qui est drôle. Si vous particularisez votre espace de travail et que vous l'enregistrez par exemple avec le nom "Mon espace de travail 1". Lorsque vous quittez Embarcadero et que vous le relancez, il se mettra systématiquement sur l'espace de travail "Espace de travail par défaut".

Vous devrez systématiquement allez rechercher votre enregistrement "Mon espace de travail 1" pour retrouvez votre espace de travail ... Mort De Rire. Sinon, vous devez sauvegarder les modifications de votre Espace de Travail dans "Espace de travail par défaut". Ce qui n'est pas logique. Ce qui serait logique c'est par exemple d'avoir un bouton "Définir comme espace de travail par défaut" ...

C'est un peu alambiqué, j'espère que vous avez compris. Embarcadero ne fonctionne pas comme vous voudriez ou comme il serait le simple et efficace de fonctionner. Embacadero fonctionne comme ses idiots de concepteurs l'ont conçu point final.

Le mode Explorateur

Là aussi c'est risible, ce serait drôle si ce n'était pas complétement stupide et du coup inutilisable mais vous avez une barre d'outils nommée à juste titre "Explorateur" alors qu'est censé faire cette barre d'outils avec ses deux boutons "Flèche avant" et "Flèche arrière".

Et bien, quand vous vous déplacez dans les fichiers de code source de votre logiciel vous pouvez "revenir d'où vous venez" en cliquant que "Flèche arrière" et vous pouvez retourner où vous étiez quand vous cliquez sur "Flèche avant". Jusque là nous sommes d'accord je crois.

Alors comment ces idiots de concepteurs d'Embarcadero on conçu leurs Flêches d'exploration ? Et bien si vous vous êtes déplacé dans le même fichier alors retour à la page d'accueil !!! Si vous vous êtes déplacé dans plusieurs fichiers alors on enregistre tout les déplacements du curseur. Non mais vous voyez un peu la stupidité du truc ... ?

Donc, la plupart du temps cette fonction ne sert à rien quand vous êtes dans le même fichier et pourtant vous pouvez avoir des fichiers qui font plusieurs milliers de lignes et vous aimeriez bien retrouver par où vous êtes passé. Et sinon si vous avez cliqué par exemple dix ou douze fois dans le même bloc de code, le fait de cliquer sur le Flèche arrière fera déplacer votre curseur avec tous ses mouvements dans le même bloc de code !!!

Quand j'ai découvert ce fonctionnement, je suis tombé de ma chaise, j'étais mort de rire mais d'un rire nerveux cette fois. Surtout quand ce truc stupide me ramène sans cesse à la page d'accueil. En plus, si elle était fermée, il l'ouvre ...

Alors pour les idiots de concepteurs d'Embacadero, voici un petit pseudo code qu'ils devraient intégrer j'espère dans la prochaine release : si mon curseur se déplace dans un bloc proche alors je n'enregistre pas les déplacements.

J'ai vérifié ce fonctionnement sur Embarcadero 10.3 ! Même stupidité !

L'Intellisense ou autocomplétion

Je suis donc revenu à la version 10.0.3 d'Embarcadero mais c'est une calamité, je ne vous dis pas comment ça rame, j'ai appelé cela : "le kidnapping de mon curseur". Pendant que ce truc rame comme cela n'est pas permis, je ne peux rien faire mon curseur est en mode attente et je ne peux pas développer mon code ! C'est inadmissible comment c'est gens chargés de cet outil Embarcadero peuvent avoir laissé cette fonctionnalité sortir ainsi "Ce n'est pas travaillable".

Je passe mon temps à attendre qu'Embarcadero veuille bien me rendre mon curseur pour travailler ! Et ma machine de développement est des plus puissante actuellement, je n'ose pas imaginer ce que cela donne sur des machines un peu plus anciennes.

Conclusion

Vous souhaitez optimiser votre production avec Embarcedero, c'est vain, vous devrez vous adapter à la lenteur et aux défauts de conception de cet outil qui par ailleurs est un super outil pour développer sous Windows.

Dommage car C++Builder dans les année 90 était le "RAD" le plus sympathique à utiliser, il n'y en avait pas d'autre.

Have fun if it's possible!