lundi 28 août 2017

Embarcadero déploiement d'une application stand alone pour Windows

Vous avez développé une application en C++ avec Embarcadero et maintenant vous aimeriez qu'elle fonctionne sans devoir copier dans le répertoire d'exécution toutes les DLL nécessaires à l'exécution de l'application.

C'est le genre d'information que l'on peut mettre du temps à trouver dans la documentation alors je vous livre la solution. Dans les options du projet allez chercher : Options de projet -> Lieur C++ -> Lier avec la bibliothèque d'exécution Delphi :

bibliothèque d'exécution Delphi et RTL Dynamique
Dans les options de Package : Option de projet->Packages-> Lier avec les packages d'exécution :

Lier avec les packages d'exécution

Have fun! Et surtout n'oubliez pas ce n'est que du soft !

vendredi 25 août 2017

MSDN MoveFile the Ultimate Code to Help User to know what happen

This king of function "MoveFile" is well rotten, it's made several times I have to deal with this function I remenber each time it was hell. I don't remenber the solution, so this time I will take a note for all of us.

Why this this function is so rotten, because of error message: "access denied" or "could'nt find file" wich means nothing for the user but the function failed to Move Your Files! And it is hard to find why.

Why in english? Because I did not find any solution really good in all over the documentation around the world.

If you look at his page:

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

you can see there is a probleme ; there is not enough explainations.

Embarcadero is needed in C++.

There is my code:

#define PATH_BACKUP "C:\\Temp\\"
#define PATH_BACKUP_DIR "C:\\Temp\\Save\\"
#define PATH_DIR_TO_BACKUP "C:\\MyDirectory\\Data\\Save\\"


UnicodeString backupADirectory()
{
    UnicodeString message;
    PrintLog( "backupADirectory(" );

    // If it exist, delete and recreate destination directory
    if ( TDirectory::Exists( PATH_BACKUP_DIR ) )
    {
        TDirectory::Delete( PATH_BACKUP_DIR, true ); // Recursive = true
    }

    // Directory should exist for MoveFile
    if ( TDirectory::Exists( PATH_BACKUP ) == false )
    {
        TDirectory::CreateDirectory( PATH_BACKUP );
    }

    //
    // Moves an existing file or a directory, including its children.
    // From an Existing File to a New File.
    // The New Name must not already exist.
    //
    if ( MoveFile( PATH_DIR_TO_BACKUP, PATH_BACKUP_DIR ) == 0 )
    {
        //
        // If a FileBrowser is open on a directory to backup
        // the message is: Accès refusé
        //

        LPVOID lpMsgBuf;
        FormatMessage
        (
            FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
            NULL,
            GetLastError(),
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsgBuf,
            0,
            NULL
        );

        string smsg = ( const char* )lpMsgBuf;
        String sMsg = smsg.c_str();
        sMsg = sMsg.SubString( 0, sMsg.Length() - 2 );
        message = UnicodeStringFormat( L"Error Moving files: %s", sMsg ) ;

    }
    else
    {
        message = L"Files Moved";
    }
    return message;
}

Have Fun! And don't forget it's only software.

Embarcadero Templates

Quels sont les templates que l'on peut instancier avec Embarcadero quelles sont leurs structure ? Les prérequis sont d'avoir installé une version de RAD Studio Embarcadero C++.

Et l'on fait : Fichier->Nouveau->Autres...

Templates d'applications
Les Options de la Console

Application VCL « métropolis »

La structure de l'application VCL métropolis :


Structure d'une application VCL Métropolis

Voici donc très rapidement un tour des applications que l'on peut instancier avec Embarcadero. C'est à dire à peu prêt rien. Imaginez le retard pris par les gens qui développent encore avec ce truc.

To Be Continued


CodeSite sous Embarcadero - L'outil ultime de Trace Log

Pour Tracer, Logger, il vous faut trouver le bon outil. En juillet 2015 Embarcadero rachète les composants et le produit CodeSite de Raize Software et nous voilà donc avec très un bel outil de Trace Log dans des File Viewer ou Live Viewer sous Embarcadero, c'est l'outil complet de Traces et Logs.

Accès par le menu:

Embarcadero->Outils->CodeSite

Le CodeSite Controller donne accès à quelques options de configuration de l'outil.

CodeSite Controller

CodeSite Controller

Et donc voici mes première traces en Live dans le Live Viewer :

Le Live Viewer de Code Site sous Embarcadero

L'intégration de cet outil de Trace avec un Viewer est quelque chose de différenciant par rapport à d'autres chaînes de développement qui ne propose absolument pas ce genre de chose aussi pratique.

Fonctionnalités vraiment cool

Always on top :

Fonctionnalité "Always on top" du Live viewer CodeSite sous Embarcadero

Oui, quand vous adoptez cet outil, vous ne pouvez plus vous en passer et il vous le faut sous les yeux en permanence et donc cette fonctionnalité "Always on top" est bien cool.


mercredi 21 juin 2017

On me parle de Embarcadero XE5 en Langage C++ C'est quoi cet environnement ?

J'ai pratiqué le développement RAD (Rapid Application Development) à l'époque avec le produit de Borland qui s'appelait Borland C++ Builder alors Embarcadero XE5 c'est quoi ?

D'ailleurs le net est devenu tellement mauvais, il y traîne de vieux messages poubelles que personne ne supprime et qui polluent. Ainsi en tapant "borland c++ builder 6" vous tomberez sur l'un d'entre eux ... datant de 2014 ! Il me semble bien que Borland C++ Builder n'existe plus ... dans mes souvenirs il était devenu Inprise.

Alors pour "Embarcadero xe5 c++" on me propose la chaîne de développement "en solde" ICI. C'est le premier résultat qui sort, comme c'est payant pour eux je clique ça leur apprendra !

En plus on ne trouve rien sur ce site !

Le deuxième lien semble plus prometteur :

Embarcadero C++ Builder
Compilateur C++ basé sur Clang ? pour windows 32 & 64 bits iOS et Android.
Puis on me propose d'en savoir plus sur la prise en charge du C++ moderne dans C++ Builder
J'y vais ... là on est dans le vif du sujet.

On y retrouve une description de la prise en charge de la norme C++11.

Concernant les contrôles utilisateurs :
MFC vous donne des cauchemars ? Vous trouvez wxWidgets trop basique ? VCL propose une trame incomparable qui encapsule les contrôles natifs Windows et surpasse tous les autres frameworks.

J'aime bien la phrase "MFC vous donne des cauchemars" car c'est le cas. MFC a donné des cauchemars à tous ceux qui ont eu à faire à elle. C'est le librairie des contrôles utilisateur de Microsoft, Microsoft Foundation Class.

VCL c'est pour Visual Component Library, tous les contrôles utilisateurs de la VCL dérivent de TObject. VCL vient du Delphi.

Notes diverses sur embarcadero :

La VCL est incompatible avec FireMonkey (FMX) une autre librairie de composants graphiques.

Concernant les Styles, il est possible de convertir un style pour VLC en style pour FMX.

VLC extends the RTL (Run Time Library) implementation of actions

Donc c'est quoi embarcadero ?

C'est un IDE donc la palette d'objets graphiques est soit du VLC (issu de Delphi) soit du FireMonkey ou les deux combinés.

Pour finir, vous pouvez démarrer  en vous enregistrant pour débuter votre période d'évaluation gratuite :

CX C++ Builder
Maintenant, on sait ce qu'est Embarcadero ! Concernant XE5 c'est une ancienne version de cet environnement.

Et pour la suite le Tuto c'est Ici.

Have fun !



C++11 - Qu'apporte cette nouvelle norme du Langage en 2011 ?

Standard for programming language C++ approved by International Organization for Standardization (ISO) on 12 August 2011, replacing C++03,[1] superseded by C++14 on 18 August 2014[2] and later, by C++17, which is still under development.

C++11, introduit le mot-clef thread_local pour déclarer qu'une variable doit être stockée dans une zone mémoire appartenant au thread.

- Modificateur volatile

- Délégation du constructeur
En C++11 un constructeur de classe peut appeler un autre constructeur de cette même classe se qui simplifie le code.

- Héritage du constructeur

- Les Templates

- Les Templates variadiques
comme les fonctions variadiques du C (avec un nombres d'arguments non connu à l'aide de va_list et aux macros va_start(), va_arg() et va_end() de <stdarg.h>)
exemple : la classe tuple

- Assertions statiques
static_assert(sizeof(long) > sizeof(int));
permettrait à une bibliothèque d'être certaine qu'elle est compilée sur un système vérifiant cette condition (x86-64 par exemple).

- Inférence de types
le mot clef auto se voit assigner une nouvelle sémantique
- avant : variable auto : valide seulement dans l'espace où elle est déclarée (comme c'est le comportement par défaut ce mot clef était inutile)
- maintenant une variable déclarée de type auto doit impérativement être initialisée
exemple:
auto f = boost::bind(MyFunc, _1);
f(5);
trouver le type d'objet du résultat d'un bind n'est pas facile d'ou le type auto

decltype permet de typer une variable à partir du type d'une autre variable
Exemple :
int i;
decltype(i) j = 5;


- Sémantique move()

En C++, il n'y a aucun moyen de déplacer un objet sans le copier. Ainsi la fonction swap :

template <class T>
void swap ( T& a, T& b )
{
  T c(a);
  a=b;
  b=c;
}

Appelle d'abord le constructeur de recopie puis deux assignations c'est donc trois copies au total.
C++11 introduit la fonctions std::move() dont le patron est le suivant :

template <class T>
typename remove_reference<T>::type&&
move(T&& a)
{
    return a;
}

L'objet d'origine peut être modifier à partir du résultat de la fonction move() et swap peut être réécrite de façon plus concise :

template <class T>
swap(T& a, T& b)
{
    T tmp(std::move(a));
    a = std::move(b);
    b = std::move(tmp);
}

- Énumérations fortement typées

- Pointeur NULL
en C : #define NULL ((void*)0) est impossible en C++ ne peut pas servir pour un pointeur de type différent de void*
création de nullptr qui a la particularité de pouvoir être assigné à tous types de pointeurs. On pourra écrire :

T* ptr = nullptr;

- Threads
implémentation de la bibliothèque boost.

- Type Tuple
Collection de dimensions fixe d'objets de types différents

https://fr.wikipedia.org/wiki/C%2B%2B11

C++14

- Littéraux binaires préfixe 0b ou 0B
int nb = 0b11;
std::cout << nb << std::endl; // sortie de l'application : 3

- Séparateurs de chiffres 
Pour facilité la lecture :
int un_milliard = 1'000'000'000;

https://fr.wikipedia.org/wiki/C%2B%2B14

Pour aller plus loin de bons exemples avec :

Zeste de savoir - Le C++14 est arrivé

 

mardi 20 juin 2017

Visual Studio 2017 for C++

Que pouvons nous faire avec Visual Studio 2017 en Langage C++ ? C'est la question à laquelle on va essayer de répondre ...

Installation C++ pour Visual Studio 2017

Lancer l'exe d'Installation de Visual Studio 2017 les options concernant le Langage C++ sont là.
Visual Studio 2017 Installation
Choix des composants C++ :

Développement Destop en C++
Et sur le côté le résumé des options :

Développement Desktop en C++
La suite des options :

Développement Desktop en C++ - Suite des options
On y trouve encore les bonnes vielles MFC et l'ATL, ça vous manquait je vois.

To Be Continued!