mardi 23 octobre 2018

C'est quoi QML en Qt/C++ ?

C'est un langage de description d'interface graphique permettant aux objets décrits dans le QML d'être d'une part affichés dans l'UI et d'autre part d'interagir avec le Code C++ de Qt ou un autre langage comme Python.

Développement Qt/C++

Si vous utilisez Qt Creator la création du projet doit se faire avec l'option "Qt Quick Controls Application". Bon voilà, c'est à peu prêt tout, d'aucuns diront que c'est vraiment différent des projets "standards" mais il n'y a rien de bien sorcier là dedans.

QML est un peu l'équivalent du XAML en C#.NET.

Créer une extension de QML en Qt/C++

Rien de plus facile à la page Suivante : Qt Writing Extensions with C++
Il s'agit de créer une Class qui dérive d'un objet QML de base. C'est vraiment la force de QML c'est l'équivalent des UserControls en C# c'est à dire des .ASCX.

Il y a une partie description graphique de l'objet et une partie Code qui permet de coder le comportement du contrôle utilisateur. C'est ce que l'on trouve de puis puissant.

QML est dit aussi Qt Quick dans la littérature QML.

Voilà, on ira plus loin la prochaine fois !

vendredi 5 octobre 2018

Erreur LNK2019 - Error LNK2019 - symbole externe non résolu __except_handler4_common

Une des difficultés de la coexistence du langage C et du langage C++ ce sont les conventions de nommages du LINKER et cette error LNK2019 en est le résultat. Pour trouver la solution c'est un peu la catastrophe :

Erreur des outils Éditeur de liens LNK2019

Et alors après avoir fait tout ça, je me retrouve avec une erreur :

Gravité Code Description Projet Fichier Ligne État de la suppression
Erreur LNK2019 symbole externe non résolu __except_handler4_common référencé dans la fonction __except_handler4 MFCStarterKit D:\Mabyre\Visual Studio\CPlusPlus\MFCStarterKit4.1\MFCStarterKit\MFCStarterKit\MSVCRTD.lib(_chandler4gs_.obj) 1


Merci ! Heureusement qu'il y des âmes charitables la solution se trouve ici :

https://stackoverrun.com/fr/q/8776145

Dans votre projet de bibliothèque, consultez Propriétés -> C/C++ -> Génération de code -> Runtime Library :

Il y a des chances qu'il soit réglé sur :
DLL multithread de débogage (/ MDd)

Changez cette option et mettez la à :
multithread Debug (/ MTd)

et à la reconstruction l'erreur aura disparue !


L'original de cete article dans :

https://stackoverflow.com/questions/31867018/unresolved-external-symbol-except-handler4-common-in-visual-studio-2015/44498522#44498522

Pfffff, franchement : /MDd à la place de /MTD cela ne me serait pas venu à l'idée ...

Conseil

Lorsque vous suivez les directives de la page suivante :

https://www.developpez.net/forums/d740287/c-cpp/outils-c-cpp/visual-cpp/visual-cpp-ajout-d-bibliotheque/

pour ajouter une librairie à votre projet. N'oubliez pas que vous pouvez mettre les chemins d'accès aux .lib .dll et autres en "relatif", si vous utilisez l'outil de recherche pour aller chercher les objets il mettra le chemin en "absolu" et vous aurez alors des problèmes si vous renommez ou déplacez tout ou partie de votre projet.

Tous ces soucis ont été corrigés avec Visual Studio C#.NET, c'est curieux que cela ne le soit pas pour Visual C++ ...

Have fun!

jeudi 27 septembre 2018

Visual Studio C++ StarterKit avec MFC - Installation

Vous cherchez à développer avec Visual Studio en C++ et pourquoi pas ? On va voir ce que l'on peut faire avec cette plateforme et ses outils de développement. Comment utiliser Visual Studio pour développer en C++ ?

Installation des modules Visual Studio pour le C++

Avec Visual Studio 2017 en lançant l'installeur nous avons la possibilité d'installer trois modules :

Developpment Desktop en C++ avec Visual Studio
Développement Desktop en C++ avec Visual Studio
Mais nous avons la possibilité de développer pour les plateformes mobiles iOS et Android et Windows phone :


Développement mobile en C++ avec Visual Studio
Développement mobile en C++ avec Visual Studio
On voit également un module pour Linux.

Mon projet en C++ pour Desktop avec Visual Studio

J'instancie un projet de type Visual C++ pour créer une application avec Interface Graphique utilisateur qui s'exécute sous Windows.

Fichier->Nouveau->Projet->Autres langages->Visual C++->Application de bureau

Application de bureau Windows en C++
Application de bureau Windows en C++
Le projet est instancié :
Projet Visual Studio en C++
Je l'exécute :

Exécution du projet C++ avec Visual Studio
Une toute petite interface avec un tout petit menu.

Structure du projet Visual C++

Il faut aller voir dans les ressources pour trouver les objets graphiques, dans l'explorateur de solution je clique sur WindowsProject1.rc :


Visual C++ les ressources du projet
Visual C++ les ressources du projet
En double cliquant sur IDD_ABOUTBOX je retrouve la boite de dialogue About :



Boite de dialogue About
Boite de dialogue About
Tout ça est bien joli mais il n'y a pas les MFC. Je retourne dans l'installeur et je coche la case :

Installation des MFC pour Visual C++
Installation des MFC pour Visual C++
Et maintenant j'instancie un nouveau projet avec MFC (Microsoft Foundation Class) :

Application de bureau Windows avec MFC en C++
Application de bureau Windows avec MFC en C++
En cliquant sur OK je tombe sur un véritable Wizard de configuration de mon Application MFC :


Application de bureau avec MFC - Type d'application
SPA - MDI ?
SPA - MDI ?
Puis les choix s'enchainent ...

Choix pour le style du projet
Choix pour le style du projet

Et encore des choix :
Documents composés
Documents composés
Puis en cliquant sur le bouton suivant, on progresse dans le Wizard :


Propriétés du modèle de documents
Propriétés du modèle de documents
On atteint maintenant les choix concernant l'interface utilisateur :

Fonctionnalités de l'interface utilisateur
Ces choix sont importants, il est primordial de définir ces choix au départ car il sera ensuite bien difficile d'implémenter des barres de défilement si vous n'avez pas fait ce choix au départ.

On progresse ...


Fonctionnalités avancées
On progresse ...
Classes générées
On progresse

Classes de base
C'est incroyable tous les choix qu'il faut faire pour utiliser les MFS avec Visual C++.
On instancie le projet ...

Structure du projet Visual C++ MFC

C'est un peu plus compliqué ...

Visual Studio C++ Projet MFC
Visual Studio C++ Projet MFC
A l'exécution on obtient une application d'une complexité ... superbe !

Template d'application Visual C++ MFC
Template d'application Visual C++ MFC
Dont l'icône est :

Ajouter une légende

Pour la suite, je vous laisse avec un peu d'anglais

MFC - Quick Guide
Voici un Guide Tuto très complet sur le développement d'application de type MFC avec Visual C++

L'essentiel :
Votre application dérive de CWinApp : Class pour les Applications Windows

Developpez.com - Démarrer avec les MFC sous Visual C++
Egalement très bien pour démarrer, le problème c'est que c'est un PDF et pour le consulter il faut le télécharger. Le style est un peu ancien 2005 !

Accès aux ressources de l'application

Dans "Explorateur de solution" en cliquant sur le fichier .rc, la fenêtre d'affichage des ressources s'ouvre :
Ressrouces de l'applciation MFC C++
Affichage des ressources de l'application

Le code C++ au démarrage de l'application MFC

Dans l'Explorateur de solutions dans Fichiers sources : MainFrm.cpp (Main Frame) on atteint le code exécuté au démarrage de l'application :

Main Frame de l'application MFC C++
Main Frame de l'application MFC C++
En mettant un point d'arrêt dans la fonction OnCreate de CMainFrame :


Exécution du code de démarrage de l'application
Exécution du code de démarrage de l'application
Dans la pile d'appels on est appelé par wincore.cpp :

Appel de OnCreate par WindowProc de wincore.cpp
On accède au code de création de l'application MFC pour modifier ajouter ou supprimer des éléments graphiques de l'application.

Les MFC Microsoft Foundation Class

Les Microsoft Foundation Class ont donné des cauchemard à des générations entières de développeurs tellement abscons ! Il me faut prendre ici quelques notes en provenance du document :

ftp://ftp-developpez.com/farscape/tutoriels/demarrer-mfc-vc6.pdf

La notation hongroise, cela m'avait échappé en effet ...

C++ MFC notation hongroise

Ce PDF est véritablement le moyen de démarrer avec les MFC. C'est dommage que depuis le temps Microsoft n'ait pas proposé une alternative simple aux MFC. On ne peut pas parler de RAD (Rapid Application Development) avec les MFC c'est fastidieux long et pénible de développer avec ça.

Voilà c'est tout pour l'instant, c'était pour fixer rapidement les idées autour des applications Visual C++ avec MFC pouvoir modifier une ressource changer un peu le code au départ.

Conseil sur les MFC

Vous souhaitez développer une application Desktop pour Windows utilisez plutôt les WinForm C# c'est tellement plus agréable et efficace.

Have fun!