Cours de C++, en français, 2002 - Cours 3.5

Information about Cours de C++, en français, 2002 - Cours 3.5

Published on May 11, 2017

Author: LaurentBUNIET

Source: slideshare.net

Content

1. Cours C++ (2002) semaine 3 jour 5

2. Cours semaine 3 jour 5 Cours C++ 2 Plan du jour  Exercices récapitulatifs avec C++, une base de données et XML

3. Cours semaine 3 jour 5 Cours C++ 3 Premier programme  Ce premier programme permet d’accèder à une base de donnée, de créer divers types de fichiers sérialisés, de modifier ces fichiers et finalement de modifier la base de donnée  Nous utiliserons la base de données PTContact dont nous nous sommes déjà servis

4. Cours semaine 3 jour 5 Cours C++ 4 Premier programme (2)  L’accès à la base de données se fera par ADO, ActiveX Data Object  Les fichiers sérialisés seront de deux type  XML  ADTG, Advanced Data TableGram, un format Microsoft  Nous créerons également des DOM pour voir le traitement en cours

5. Cours semaine 3 jour 5 Cours C++ 5 Premier programme (3) #import "c:Program FilesCommon Filessystemadomsado15.dll" rename_namespace( "MSXML2" ) rename( "EOF", "ADOEOF" ) #import "c:WINNTsystem32msxml4.dll" // pour MSXML 3.0 //#import "c:WINNTsystem32msxml3.dll" using namespace MSXML2; #include <ole2.h> #include <stdio.h> #include <conio.h> #include <io.h> // une fonction inline pour voir, un peu inutile mais bon pour la démo inline void TESTHR( HRESULT x ) { if FAILED(x) _com_issue_error( x ); };

6. Cours semaine 3 jour 5 Cours C++ 6 Premier programme (4) bool supprimeFichier() { struct _finddata_t xml_file; long hFile; if( ( hFile = _findfirst( "res.xml", &xml_file ) ) != -1L ) { DeleteFile( "res.xml" ); DeleteFile( "res_new.xml" ); DeleteFile( "res.adtg" ); return true; } else return false; }

7. Cours semaine 3 jour 5 Cours C++ 7 Premier programme (5) void AffichageErreurCom( _com_error &e ) { _bstr_t bstrSource( e.Source() ); _bstr_t bstrDescription( e.Description() ); printf( "Erreur COMn" ); printf( "tCode - numéro : %08lxn", e.Error() ); printf( "tCode - signification : %sn", e.ErrorMessage() ); printf( "tSource = %sn", (LPCSTR) bstrSource ); printf( "tDescription = %sn", (LPCSTR) bstrDescription ); }

8. Cours semaine 3 jour 5 Cours C++ 8 Premier programme (6) void AffichageErreurProvider( _ConnectionPtr pConnection ) { ErrorPtr pErr = NULL; if( ( pConnection->Errors->Count ) > 0 ) { long nCount = pConnection->Errors->Count; for( long i = 0; i < nCount; i++ ) { pErr = pConnection->Errors->GetItem( i ); printf( "Erreur - numéro : %xn", pErr->Number ); printf( "Erreur - description : %sn", (LPCSTR) pErr->Description ); } } }

9. Cours semaine 3 jour 5 Cours C++ 9 Premier programme (7) void Sauve_DB_XML() { HRESULT hr = S_OK; _RecordsetPtr pRstContacts = NULL; _bstr_t strCnn( "Provider=MSDASQL.1;Persist Security Info=False;" "Data Source=PTContact;Mode=ReadWrite" ); try { TESTHR(pRstContacts.CreateInstance(__uuidof(Recordset ))); pRstContacts->Open( "SELECT * FROM Contacts", strCnn, adOpenDynamic, adLockBatchOptimistic, adCmdText );

10. Cours semaine 3 jour 5 Cours C++ 10 Premier programme (8) // persistence du RecordSet dans un fichier XML pRstContacts->Save( "res.xml", adPersistXML ); // persistence du RecordSet dans une structure DOM IXMLDOMDocumentPtr pXMLDOMDoc; TESTHR( pXMLDOMDoc.CreateInstance( __uuidof( DOMDocument ) ) ); pRstContacts->Save( pXMLDOMDoc.GetInterfacePtr(), adPersistXML ); // affichage du DOM printf( pXMLDOMDoc->Getxml() ); pRstContacts->Close();

11. Cours semaine 3 jour 5 Cours C++ 11 Premier programme (9) } catch(_com_error &e) { _variant_t vtConnect = pRstContacts->GetActiveConnection(); switch( vtConnect.vt ) { case VT_BSTR: AffichageErreurCom( e ); break; case VT_DISPATCH: AffichageErreurProvider( vtConnect ); break; default: printf( "Une erreur (ni COM, ni provider) s'est produite" ); break; } }}

12. Cours semaine 3 jour 5 Cours C++ 12 Premier programme (10) void Sauve_XML_ADTG() { HRESULT hr = S_OK; _RecordsetPtr pRstContacts = NULL; try { TESTHR(pRstContacts.CreateInstance(__uuidof(Recordset))); pRstContacts->Open( "res.xml", "Provider=MSPersist;", adOpenForwardOnly, adLockPessimistic, adCmdFile );

13. Cours semaine 3 jour 5 Cours C++ 13 Premier programme (11) pRstContacts->Find( "LastName = 'BUNIET'", NULL, adSearchForward ); if( pRstContacts->ADOEOF ) { printf( "Le contact n'a pas été trouvé dans le fichier XMLn" ); pRstContacts->Close(); return; } else { printf( "Le contact a été trouvé dans le fichier XMLn" ); }

14. Cours semaine 3 jour 5 Cours C++ 14 Premier programme (12) pRstContacts->GetFields()->GetItem( "City" )->PutValue( "Berkeley" ); pRstContacts->GetFields()->GetItem( "PostalCode" )->PutValue( "L-2401" ); pRstContacts->Update(); IXMLDOMDocumentPtr pXMLDOMDoc; TESTHR( pXMLDOMDoc.CreateInstance( __uuidof( DOMDocument ) ) ); pRstContacts->Save( pXMLDOMDoc.GetInterfacePtr(), adPersistXML ); printf( pXMLDOMDoc->Getxml() ); // persistence du RecordSet dans un ADTG pRstContacts->Save( "res.adtg", adPersistADTG ); pRstContacts->Close();

15. Cours semaine 3 jour 5 Cours C++ 15 Premier programme (13) } catch(_com_error &e) { _variant_t vtConnect = pRstContacts->GetActiveConnection(); switch( vtConnect.vt ) { case VT_BSTR: AffichageErreurCom( e ); break; case VT_DISPATCH: AffichageErreurProvider( vtConnect ); break; default: printf( "Une erreur (ni COM, ni provider) s'est produite" ); break; } }}

16. Cours semaine 3 jour 5 Cours C++ 16 Premier programme (14) void Sauve_ADTG_BD() { HRESULT hr = S_OK; _RecordsetPtr pRstContacts = NULL; _ConnectionPtr pCnn = NULL; _bstr_t strCnn( "Provider=MSDASQL.1;Persist Security Info=False;" "Data Source=PTContact;Mode=ReadWrite" ); try { TESTHR( pCnn.CreateInstance( __uuidof( Connection ) ) ); TESTHR(pRstContacts.CreateInstance(__uuidof( Recordset)));

17. Cours semaine 3 jour 5 Cours C++ 17 Premier programme (15) pRstContacts->Open( "res.adtg", "Provider=MSPersist;", adOpenForwardOnly, adLockOptimistic, adCmdFile ); pCnn->Open( strCnn, "", "", NULL ); pRstContacts->PutActiveConnection( _variant_t( (IDispatch *) pCnn ) ); pRstContacts->UpdateBatch( adAffectAll ); pRstContacts->Close(); pCnn->Close();

18. Cours semaine 3 jour 5 Cours C++ 18 Premier programme (16) } catch(_com_error &e) { _variant_t vtConnect = pRstContacts->GetActiveConnection(); switch( vtConnect.vt ) { case VT_BSTR: AffichageErreurCom( e ); break; case VT_DISPATCH: AffichageErreurProvider( vtConnect ); break; default: printf( "Une erreur (ni COM, ni provider) s'est produite" ); break; } }}

19. Cours semaine 3 jour 5 Cours C++ 19 Premier programme (17) void main() { if( FAILED( ::CoInitialize( NULL ) ) ) return; if( supprimeFichier() ) { printf( "Le fichier res.xml a été supprimé!n" ); } printf( "Passage de DB vers XMLn" ); Sauve_DB_XML(); printf( "Passage de XML vers ADTGn" ); Sauve_XML_ADTG(); printf( "Passage de ADTG vers DBn" ); Sauve_ADTG_BD(); ::CoUninitialize(); }

20. Cours semaine 3 jour 5 Cours C++ 20 Premier programme (18)  Ce programme consulte la table Contacts dans la Data Source PTContact  Il stocke tous les enregistrements dans un fichier XML  Au passage, on sauve les enregistrements dans un DOM  Ce DOM est ensuite affiché à l’écran, dans la console

21. Cours semaine 3 jour 5 Cours C++ 21 Premier programme (19)  Le fichier XML est rechargé en mémoire, il est modifié et sauvagardé dans ub ADTG  Le nouveau DOM est lui aussi affiché dans la fenêtre console  Le contenu du fichier ADTG est finalement chargé et sauvegardé dans PTContact  Le tout en COM  Normal pour utiliser de l’ADO !

22. Cours semaine 3 jour 5 Cours C++ 22 Premier programme (20)  Exercice :  Reprenez le premier exemple de la journée traitant de la persistence XML d’une table d’une base de données relationnelle  Écrivez un fichier XSL permettant de produire une sortie HTML à ce fichier  Testez votre fichier XSL avec le programme MSXSL et Internet Explorer (pour le fichier résultat HTML)

23. Cours semaine 3 jour 5 Cours C++ 23 Premier programme (21)  Exercice (suite) :  Modifier le premier programme en vous inspirant des sources de MSXSL : effectuez la transformation XSL à l’intérieur du programme ComSave

24. Cours semaine 3 jour 5 Cours C++ 24 Deuxième programme  Il ne s’agit pas d’un programme mais d’un ensemble de programmes fournis par Microsoft  Le workspace contient 5 projets liés  Ils permettent de voir la manière de créer et de traiter des documents XML  Notion de producteurs et de consommateurs

25. Cours semaine 3 jour 5 Cours C++ 25 Deuxième programme (2)  Récupérez le fichier xml_consumer.exe  Décompressez le fichier dans votre répertoire "My Projects"  Ouvrez le fichier de Workspace qui se trouve sous "XMLComponents"  Le fichier de workspace s’appelle "XMLComponents.dsw"

26. Cours semaine 3 jour 5 Cours C++ 26 Deuxième programme (3)  Mettez l’Active Project sur tstXML  Compilez  Exécutez  Allez regardez c:example.xml

27. Cours semaine 3 jour 5 Cours C++ 27 Deuxième programme (4)  Exercice :  Qui a écrit quoi ?  Modifiez le programme approprié de manière à créer deux autres childObjects dans le fichier c.example.xml  Dans les childObjects générés, ajoutez un troisième élément racine "myNewValue" pouvant contenir une chaîne de caractères

28. Cours semaine 3 jour 5 Cours C++ 28 L’avenir de C++  C et C++ semble être des langages très efficaces lorsqu’il s’agit de faire des programmes dont l’objectif est  D’être compacte  D’être rapide  D’être très technique  Et on peut se dire que c’est vrai…

29. Cours semaine 3 jour 5 Cours C++ 29 L’avenir de C++ (2)  À la Washington University de Saint Louis (Missouri), un chercheur (Douglas Schmidt) a développé un ensemble de programmes écrit en C++ permettant de mettre en œuvre CORBA  Modèle objet distribué "similaire" à COM  Microsoft fait d’ailleurs bizarrement partie des sponsors ayant financé le projet !

30. Cours semaine 3 jour 5 Cours C++ 30 L’avenir de C++ (3)  Cette architecture est composée de deux blocs  ACE, Adaptive Communication Environment  TAO, The ACE ORB

31. Cours semaine 3 jour 5 Cours C++ 31 L’avenir de C++ (4)  La totalité de la plate-forme représente un total de 135.000 ligne de code en C++  C’est beaucoup  Et Douglas Schmidt est un très bon programmeur C++ !  Rassurez-vous, il n’était pas seul pour les 135.000 lignes…  Consultez les sources du projet…  ACE-TAO est très rapide  Il est même tellement rapide qu’il s’agit désormais d’une plate-forme CORBA temps-réel !  Et il semble que ce soit bien la plus rapide du marché…

32. Cours semaine 3 jour 5 Cours C++ 32 L’avenir de C++ (5)  La plate-forme est tellement efficace que certains industriels l’utilisent  Parmi ces industriels se trouvent Boeing  TAO est une plateforme logicielle utilisée dans l’avionique des dernières versions des avions :  F15 Eagle (au moins en test)  F/A 18 Hornet (au moins en test)  AV-8B Harrier (en production)

33. Cours semaine 3 jour 5 Cours C++ 33 L’avenir de C++ (6)  C++ semble donc avoir de beaux jours devant lui  Des produits industriels l’utilisent  Et certains de ces produits sont sensibles !  Et pourtant :

34. Cours semaine 3 jour 5 Cours C++ 34 L’avenir de C++ (7)  Douglas Schmidt a quitté la wustl pour rejoindre UCI, University of California, Irvine  Il y développe Zen, une plateforme CORBA temps-réel en … Java

35. Cours semaine 3 jour 5 Cours C++ 35 Questions / Remarques

36. Cours semaine 3 jour 5 Cours C++ 36 Le mot de la fin Bons pointeurs !

#import presentations

Introduction to ml
18. 06. 2020
0 views

Introduction to ml

Python OpenCV Real Time projects
31. 05. 2020
0 views

Python OpenCV Real Time projects

Related presentations


Other presentations created by LaurentBUNIET