Upload
laurent-buniet
View
129
Download
1
Embed Size (px)
Citation preview
Cours C++ (2002)
semaine 3
jour 1
Cours semaine 3 jour 1 Cours C++ 2
Plan du jour
ActiveX
Cours semaine 3 jour 1 Cours C++ 3
Présentation d’ActiveX
ActiveX est une technologie purement
Microsoft, ne fonctionnant que sur les plate-
formes Microsoft
Cependant, les idées qui s’y trouvent sont
partagées par beaucoup
Développement de composants
Réutilisabilité des composants pour la
composition d’applications
Cours semaine 3 jour 1 Cours C++ 4
Présentation d’ActiveX (2)
La première solution permettant de greffer
une application sur Windows consistait à
utiliser des DLL, Dynamic Link Libraries
Permet de partager du code entre plusieurs
applications, le code est normalement moins
bogué car plus utilisé
Facilité de mise à jour avec une copie en un
endroit, copie qui peut être remplacée sans
réaliser une édition de liens
Cours semaine 3 jour 1 Cours C++ 5
Présentation d’ActiveX (3)
Plusieurs manière de lier une application à
une ou plusieurs DLL :
Early binding : au lancement d’un programme
qui l’utilise, les DLL sont chargées en mémoire
Run-Time Binding : une DLL est chargée en
mémoire losrque le programme en a besoin
Toutes les DLL ont un DllMain() pour
l’initialisation et la terminaison
Cours semaine 3 jour 1 Cours C++ 6
Présentation d’ActiveX (4)
Toutes les méthodes d’une DLL peuvent être exportées
Les données d’une DLL peuvent être privées ou exportées
Une DLL peut être ou non liée aux MFC
Elle peut utiliser les services fournis par mfcXX.dll ou pas
Il existe des DLL régulières (interfaces C, même pour VisualBasic) et des DLL étendues (interfaces C++, permettant de construire des objets)
Cours semaine 3 jour 1 Cours C++ 7
Présentation d’ActiveX (5)
Dans les DLL :
AFX_MANAGE_STATE(
AfxGetStaticModuleState() ); dans chaque
méthode qui utilise des MFC
Déclaration des méthodes et données exportées
par _dllspec( dllexport ) int MaFonc( int x );
Dans les programmes utilisant la DLL :
_dllspec( dllimport ) int MaFonc( int x );
pour utiliser une fonction de la DLL
Cours semaine 3 jour 1 Cours C++ 8
Présentation d’ActiveX (6)
ActiveX est une évolution de solutions déjà
existantes chez Microsoft
Windows 16 bits : DDE, Dynamic Data
Exchange, permet l’échange de données entre
deux applications
Puis OLE, Object Linking and Embedding,
utilisant une approche objet : possibilité
d’intégrer dans une application des objets issus
d’autres applications Windows
Cours semaine 3 jour 1 Cours C++ 9
Présentation d’ActiveX (7)
OLE : composition,
stockage, échange
et intégration de
documents
Microsoft
Application 1
Application 2
Application 1 Application 2DDE
OLE
Cours semaine 3 jour 1 Cours C++ 10
Présentation d’ActiveX (8)
Avec OLE, il est possible d’embarquer un
document rattaché à une application dans un
autre document rattaché à une autre
application
Un tableau Excel dans un document Word
Cependant, si l’on modifie le document
embarqué, on lance l’application
responsable dans une autre fenêtre
Cours semaine 3 jour 1 Cours C++ 11
Présentation d’ActiveX (9)
Puis OLE 2, corrections des défauts d’OLE
(…) et introduction du modèle COM,
Component Object Model
OLE 2 et COM étant disponibles, Microsoft
introduit alors la notion de composants
OLE, OCX, OLE Control eXtension
Utilisable au départ avec les extensions VBX de
VisualBasic, prédécesseur d’OCX
Cours semaine 3 jour 1 Cours C++ 12
Présentation d’ActiveX (10)
Avec OLE 2, il est encore (…) possible d’embarquer un document dans un autre d’un type différent
Cette fois, le document embarqué sera modifié à l’intérieur de l’autre
Si l’on modifie un document Excel dans un document Word, le document Word reste visible « autour » du document Excel. L’utilisateur n’a pas l’impression de quitter Word mais Excel est lancé et s’occupe de la gestion graphique et remplace les menus de l’application du document englobant par ses propres menus
Cours semaine 3 jour 1 Cours C++ 13
Présentation d’ActiveX ()
Cours semaine 3 jour 1 Cours C++ 14
Présentation d’ActiveX ()
Cours semaine 3 jour 1 Cours C++ 15
Présentation d’ActiveX (13)
Les OCX sont basés sur OLE 2 mais ne sont pas restreints aux documents
La technique d’insertion de ressources graphiques est étendue à tout type de programmes
Un OCX est plus qu’une DLL car il fournit le code, les ressources graphiques mais également les mécanismes de gestion des ressources graphiques et du comportement
Cours semaine 3 jour 1 Cours C++ 16
Présentation d’ActiveX (14)
Remarque : le modèle COM adhère aux
idées théoriques relatives à la création, à la
distribution et à la réutilisation de
composants.
COM a été développé par Digital (DEC)…
COM est d’ailleurs disponible sur OpenVMS !
Rappelez vous que Windows NT (3.51…) est
également l’héritier direct de VMS, écrit par
Digital ?
Cours semaine 3 jour 1 Cours C++ 17
Présentation d’ActiveX (15)
Il existe également une version Solaris
(l’Unix de Sun) et une version True64Unix
disponible auprès de l’OpenGroup
Seul problème : la licence coûte 35.000
dollars US pour 5 postes !
Mais pour ce prix là, on vous livre les sources !
Il y a donc moyen de déboguer…
Cours semaine 3 jour 1 Cours C++ 18
Présentation d’ActiveX (16)
ActiveX utilise (respecte) COM ou DCOM
(Distributed COM) pour la communication
Comparaison frustre par rapport à CORBA :
CORBA OLE
Couche de
transportORB
COM (local)
DCOM (réseau)
vendeursnombre
incalculableMicrosoft
Cours semaine 3 jour 1 Cours C++ 19
Présentation d’ActiveX (17)
Il est souvent question de contrôles ActiveX
Il ne s’agit ni plus ni moins que de l’utilisation
d’ActiveX (d’OCX) dans des pages HTML
Équivalent aux plug-ins de Netscape
Permet de lancer une application au sein d’une page
HTML ou en lieu et place d’une page HTML
Un document Word, PDF, Powerpoint peut être visionné dans
Internet Explorer
Même la machine virtuelle Java est un contrôle ActiveX pour
Internet Explorer !
Peut s’utiliser avec ActiveX Scripting
Cours semaine 3 jour 1 Cours C++ 20
Présentation d’ActiveX (18)
ActiveX Automation est le nouveau nom
d’OLE Automation
Permet à une application Word ou Visual Basic
d’accèder à des objets COM
Il s’agit d’objets de base sans rapport avec la
notion de Document/View
Cours semaine 3 jour 1 Cours C++ 21
Présentation d’ActiveX (19)
DocObject, ou Document Object, ou
ActiveX document, permet d’afficher un
document à l’intérieur d’un autre
En quelque sorte, OLE 3.0
Une application peut être un serveur DocObjet
tandis qu’une autre sera un client DocObjet
Internet Explorer est un client DocObjet pour de
nombreuses applications
Cours semaine 3 jour 1 Cours C++ 22
Présentation d’ActiveX (20)
Avantages d’ActiveX
Migration rapide d’OLE 2.0 vers DocObject (mais pas d’OCX vers DocObject…)
Dans IE, rapidité des contrôles ActiveX qui sont compilés en binaire (Java est compilé mais doit encore être interprété par la JVM)
Intégration complète avec le système Win32
Un ActiveX peut effectuer des tâches d’administration : c’est bien s’il ne s’agit pas d’un virus, d’un vers ou d’un cheval de Troie…
Cours semaine 3 jour 1 Cours C++ 23
Présentation d’ActiveX (21)
Inconvénients d’ActiveX
Portabilité discutable : il faut une version d’un
ActiveX pour 95/NT, une pour NT MIPS, une
pour Macintosh
Bien plus faible sécurité que Java. Offre une
signature de contrôle mais passée cette sécurité,
un ActiveX peut TOUT faire
InternetExploder permet de rebooter Windows dès
qu’il est appelé dans une page HTML
Cours semaine 3 jour 1 Cours C++ 24
COM / DCOM
COM et DCOM sont à la base des
composants ActiveX
Il est impossible de faire des ActiveX sans !
Du point de vue de Microsoft, cela offre une
interface de programmation unifiée
En local (COM), mélange des DLL et de l’IPC,
Inter Process Communication
En distribué, idem mais le « fil » est plus long :
RPC, Remote Procedure Call
Cours semaine 3 jour 1 Cours C++ 25
COM / DCOM (2)
COM est un standard de communication
COM est un framework permettant de créer
et d’utiliser des composants
Les composants remplissent les slots vides du
framework
Cours semaine 3 jour 1 Cours C++ 26
COM / DCOM (3)
COM est un « standard » défini au niveau
binaire
N’importe quel langage
N’importe quel endroit (intra-process, inter-
process et inter-machine)
Les performances du modèle intra-process ne
doivent pas être dégradées par rapport à la
solution DLL
Cours semaine 3 jour 1 Cours C++ 27
COM / DCOM (4)
Principes de COM
Utilisation d’interfaces pour implémenter des
comportements
Toute manipulation du composant se fait à
travers une interface
Un objet COM peut implémenter plusieurs
interfaces simultanéement
Le composant lui-même est une boite noire
Cours semaine 3 jour 1 Cours C++ 28
COM / DCOM (5)
Serveur
COM
Object
IUnknown
DoFirstFunction()
DoOtherFunction( )
DoMyVeryLastFunction( )
IRobot
IDispatch
Cours semaine 3 jour 1 Cours C++ 29
COM / DCOM (6)
En définissant un objet COM, il faut
obligatoirement implémenter certaines
interfaces obligatoires
Elles permettent de faire le lien avec les
mécanismes se trouvant dans la librairie COM
D’autres interfaces peuvent être définies
pour donner sa spécificité au composant
Cours semaine 3 jour 1 Cours C++ 30
COM / DCOM (7)
Les interfaces permettent de spécifier le contrat de l’objet
Comme pour les ADT
Elles définissent les comportements, pas les états
Elles sont identifiées par un IID, Interface ID
Elles doivent dériver de IUnknown
Sorte de super interface, équivalent d’une super classe Object qui n’existe pas en C++
La syntaxe d’une interface est définie dans une librairie de types (définition des entrées et des sorties)
Cours semaine 3 jour 1 Cours C++ 31
COM / DCOM (8)
Les interfaces
Sont immuables
Pour modifier une interface, il faut en créer une
nouvelle avec un nouveau numéro de version
Renvoient généralement un résultat HRESULT
(un type Windows)
Attention au problème des passages par
valeur et des passages par référence
Attention à la taille des objets envoyés
Cours semaine 3 jour 1 Cours C++ 32
COM / DCOM (9)
Les classes qui implémentent les interfaces sont des classes COM
Elles possèdent un nom
Elles contiennent l’implémentation
Elles sont identifiées par un CLSID, Class ID
Les objets COM sont des instances de la classe COM
Les composants COM sont des ensembles avec les interfaces, le code, etc
Cours semaine 3 jour 1 Cours C++ 33
COM / DCOM (10)
Operating System
Application Operating System
Application
Application
DLL
Différentes physionomies d’appels
Cours semaine 3 jour 1 Cours C++ 34
COM / DCOM (11)
L’architecture de Microsoft se veut
transparente pour les appels
Les objets s’appellent de la même manière
quelle que soit leur localisation
Le cas le plus rapide correspond au cas où les
composants se trouvent dans une DLL qui est
utilisée de la même manière que ce qui a été vu
précédemment
Cours semaine 3 jour 1 Cours C++ 35
COM / DCOM (12)
En fait :
L’intra-process se fait grâce aux DLL
L’inter-process se fait grâce aux EXE
Les DLL continuent à ressembler à des
DLL, mais se sont désormais des objets
COM
Cours semaine 3 jour 1 Cours C++ 36
COM / DCOM (13)
InprocessClient Composant
COM
runtime
COM
runtime
DCOM network
protocol
Remote
Local
IPC
Security
providerRPC
Protocol stack
Security
providerRPC
Protocol stack
Cours semaine 3 jour 1 Cours C++ 37
COM / DCOM (14)
Client Composant
Client ComposantCOM
Processus client Processus serveur
COMDCE
RPCClient
ServeurClient
COM Composant
Inprocess :
appel rapide et
direct des fonctions
Local :
sur une même
machine, appel
rapide
Remote :
distribué : appel de
l’objet résidant sur
une autre machine
Cours semaine 3 jour 1 Cours C++ 38
COM / DCOM (15)
Pour le RPC dans DCOM, DCE-RPC est
utilisé
DCE signifie Distributed Computing
Environment
Il s’agit de la première tentantive industrielle de
communication inter-systèmes
Elle a eu très peu de succès (très lourd)
CORBA s’en est aussi inspiré pour aller plus
loin (GIOP et IIOP)…
Cours semaine 3 jour 1 Cours C++ 39
COM / DCOM (16)
Ce que COM/DCOM assure pour vous :
Sécurité (mais pas complètement ! Rappelez
vous les problèmes des contrôles ActiveX)
Informations sur le type (répertoire des
interfaces disponibles : Interface Repository)
Information sur le nommage : nom de l’objet
rattaché à son emplacement, processus de
naming assuré par des monikers chez
Microsoft
Cours semaine 3 jour 1 Cours C++ 40
COM / DCOM (17)
Ce que COM/DCOM assure pour vous (2) :
Invocation dynamique (dynamic invocation)
qui est baptisée automation
Transfert de données : il s’agit d’un protocole
de transport après tout !
Gestion du registry (sert dans le processus de
nommage)
Gestion des catégories de composants
Cours semaine 3 jour 1 Cours C++ 41
COM / DCOM (18)
Ce que COM/DCOM assure pour vous (3) :
La gestion des transactions à condition d’avoir
une base de données qui les supporte (ce n’est
pas le cas d’Access mais de SQL Server,
développé à partir de Sybase)
Les transactions distribuées nécessitent COM+
Communications asynchrones, à condition
d’avoir le Microsoft Transaction Server
Cours semaine 3 jour 1 Cours C++ 42
COM / DCOM (19)
COM Runtime
COM et DCOM Registry
Securité(SSPI)
NTLM
KerberosNorme de Transports DCE
MS-RPC
TCP UDP IPX SPX HTTP “Falcon”ETC...
Services de base(Automation, Monikers, Storage, ComCat, Data Transfer, IR)
Composants et Applications
Cours semaine 3 jour 1 Cours C++ 43
COM / DCOM (20)
Pointer to Method 1
Pointer to Method 6
Pointer to Method 3
Pointer to Method 4
Pointer to Method 5
Pointer to Method 2
MaFonction1() {...}
MaFonction2() {...}
MaFonction3() {...}
MaFonction4() {...}
MaFonction5() {...}
MaFonction6() {...}VTABLE
ClientObjet
Pointeur sur
l‘interface
Pointeur interne
sur la
VTABLE
Réalisation d’un appel :Pointer to members ?
Cours semaine 3 jour 1 Cours C++ 44
COM / DCOM (21)
Avant que le client ait le lien présenté vers
l’interface, le système doit la trouver en
fonction des informations fournies par le
client
Processus mis en œuvre : nommage, gestion du
registre, gestion du cycle de vie et transport des
données
Cours semaine 3 jour 1 Cours C++ 45
COM / DCOM (22)
Client
Serveur
Objet
Librairie
COM
CLSID_X
CLSID_Y
C:\SERVER1.DLL
C:\SERVER2.EXE
...
System registry2 : COM localise
et instancie le
serveur
3 : un pointeur vers
les interfaces de A
est retourné par la
librairie COM
4 : le client peut
appeler des
fonctions de A
1 : le client appelle
CoCreateInstance
( CLSID_Y,IID_A )
A
...
Cours semaine 3 jour 1 Cours C++ 46
COM / DCOM (23)
objetProxyclient Stub
Processus client Processus serveur
Même machine
IPC
En local :
Cours semaine 3 jour 1 Cours C++ 47
COM / DCOM (24)
objetProxyclient Stub
Processus client Processus serveur
Machine X Machine Y
RPC
En remote :
Cours semaine 3 jour 1 Cours C++ 48
COM / DCOM (25)
Les proxy et les stub sont des classes qui
sont parfois qualifiées de helpers
Ils effectuent l’encodage binaire de
l’information pour l’envoyer sur le « fil » du
côté de l’émetteur
Ils effectuent le décodage du stream binaire de
l’autre côté du fil pour récupérer l’information
Les principes sont les même dans tous les
environnements de distribution objets
Cours semaine 3 jour 1 Cours C++ 49
COM / DCOM (26)
Pour respecter la théorie, on parle de
Marshalling pour l’encodage du message
binaire
Unmarshalling pour le décodage du message
binaire
Une fois le codage effectué, il est possible
d’envoyer le flux sur de nombreux types de
protocoles de transport de bas niveau
Cours semaine 3 jour 1 Cours C++ 50
COM / DCOM (27)
TCP, UDP
IPX, SPX
HTTP
ServeurClient
C
O
MQueued
Clients
C
O
M
Objet
COM
Différentes normes de transport :
Cours semaine 3 jour 1 Cours C++ 51
COM / DCOM (28)
Les proxy et les stubs doivent, bien
évidemment, se comprendre parfaitement de
chaque côté du fil
Ils doivent comprendre les messages de la
même manière, exactement
Pour éviter les problèmes, ils sont définis à
partir d’un seul et même fichier
Fichier (M)IDL, Microsoft Interface Definition
Language
Cours semaine 3 jour 1 Cours C++ 52
COM / DCOM (29)
Définition d‘interface
et de librairies en IDL
Compilateur
MIDL
Proxies Type library (.tlb)Stubs Autres fichiers
Cours semaine 3 jour 1 Cours C++ 53
COM / DCOM (30)
Attention aux différences de vocabulaire !
L’IDL de Microsoft n’est pas l’IDL de CORBA
Avant l’IDL, Microsoft avait l’ODL et a maintenant
le MIDL (IDL de CORBA semble registered)
Le client Microsoft utilise un proxy et le
serveur Microsoft utilise un stub
Le client CORBA utilise un stub et le serveur
CORBA utilise un skeleton
Cours semaine 3 jour 1 Cours C++ 54
ATL
Active Template Library
Nous en avons déjà parlé… De même que de la
WTL
ATL est une librairie bien plus légère que MFC
qui permet de développer de petits composants
ayant des capacités d’exécution plus rapide que
les applications MFC
Mais certains développements ATL utilisent MFC…
Cours semaine 3 jour 1 Cours C++ 55
ATL (2)
ATL version 1 apportait le support de
IUnknown, IClassFactory (une autre
manière de créer un objet), IDispatch,
IConnectionPointContainer et les
énumérations COM
ATL version 2 : améliorations et support des
contrôles ActiveX
ATL version 3 : améliorations…
Cours semaine 3 jour 1 Cours C++ 56
ATL (3)
ATL est normalement fait pour être utilisée
en conjonction avec la STL, cette dernière
fournissant les strings et collections qui ne
se trouvent pas dans ATL
Cours semaine 3 jour 1 Cours C++ 57
ATL (4)
La gestion des évènements se fait à travers
un connection point qui a besoin
D’une source qui envoie des évènements
Interface IConnectionPoint
Plusieurs sources d’un objet dans un
IConnectionPoint Container
D’un réceptacle (sink) qui les reçoit
D’un mécanisme qui permet d’attacher la
source à son réceptacle
Cours semaine 3 jour 1 Cours C++ 58
ATL (5)
Supposons que nous utilisons la classe
COM “Exemple”
Templates source disponibles dans ATL
IConnectionPointContainerImpl<CExemple>
Cproxy_IExempleEvents<CExemple>
BEGIN_COM_MAP et
BEGIN_CONNECTION_POINT_MAP
Cours semaine 3 jour 1 Cours C++ 59
ATL (6)
Template réceptacle
Implémentation de l’interface
IDispEventImpl<>
Enregistrement du mécanisme avec
IConnectionPoint::Advise et
IConnectioPoint::Unadvise
Cours semaine 3 jour 1 Cours C++ 60
ATL (7)
Création d’un ActiveX
Création du squelette du contrôle (AppWizard)
Ajout de propriétés accessibles depuis
l’extérieur (ClassWizard)
Ajout de méthodes : définition des actions du
contrôleur
Ajout d’évènements : gestion des évènements
utilisateur
Signature du code : certificat d’authentification
Cours semaine 3 jour 1 Cours C++ 61
ATL (8)
Pattern d’utilisation d’un ActiveX:void f( void )
{
IUnknown* pUnk = 0; // 0 pour NULL
// demande de création
HRESULT hr = DemandeUnObjet( &pUnk );
if( SUCCEEDED( hr ) )
{
// utilisation de l’objet obtenu
UneFonction( pUnk );
}
// libération
pUnk->release()
}
Cours semaine 3 jour 1 Cours C++ 62
ATL (9)
Cours semaine 3 jour 1 Cours C++ 63
ATL (10)
Cours semaine 3 jour 1 Cours C++ 64
ATL (11)
Le serveur COM
sera une DLL
L’initialisation de
la DLL se fera là
L’IDL à
compléter est là
Cours semaine 3 jour 1 Cours C++ 65
ATL ()
Cours semaine 3 jour 1 Cours C++ 66
ATL ()
Cours semaine 3 jour 1 Cours C++ 67
ATL ()
Cours semaine 3 jour 1 Cours C++ 68
ATL (15)
Cours semaine 3 jour 1 Cours C++ 69
ATL (16)
Cours semaine 3 jour 1 Cours C++ 70
ATL (17)
Cours semaine 3 jour 1 Cours C++ 71
ATL (18)
Cours semaine 3 jour 1 Cours C++ 72
ATL (19)
Cours semaine 3 jour 1 Cours C++ 73
ATL ()
Cours semaine 3 jour 1 Cours C++ 74
ATL (21)
Cours semaine 3 jour 1 Cours C++ 75
ATL ()
Cours semaine 3 jour 1 Cours C++ 76
ATL ()
Cours semaine 3 jour 1 Cours C++ 77
ATL ()
Cours semaine 3 jour 1 Cours C++ 78
ATL (25)
Nous avons désormais un objet COM qui
fonctionne !
Il est dans une DLL
Il possède une méthode
Il est enregistré dans le système
Sauvez tous les fichiers et fermez le
Workspace courant
Cours semaine 3 jour 1 Cours C++ 79
ATL (26)
Dans le répertoire Projects\Simple_ATL, cherchez le fichier Simple_ATL_i.c
Copier/coller les lignes suivantes dans un fichier avec WordPad ou NotePad :
const IID IID_IFirst_ATL =
{0x6E236158,0xB1E0,0x4440,{0xB8,0xA0,
0x24,0xA1,0x1F,0xCA,0xCA,0x98}};
const CLSID CLSID_First_ATL =
{0xE5EBE21E,0x50D1,0x438D,{0xB8,0x48,
0x0D,0xA4,0x47,0x72,0x8C,0xE3}};
Les valeurs que vous aurez seront différentes de celles présentées ici !
Cours semaine 3 jour 1 Cours C++ 80
ATL (27)
Nous allons maintenant créer un programme
client simple
Pour ne pas perdre les bonne habitudes, nous
allons utiliser une Windows 32 console
Application qui sera exécutée dans une fenêtre
Shell
Cours semaine 3 jour 1 Cours C++ 81
ATL (28)
Cours semaine 3 jour 1 Cours C++ 82
ATL (29)
Cours semaine 3 jour 1 Cours C++ 83
ATL (30)
Cours semaine 3 jour 1 Cours C++ 84
ATL (31)
#include "..\Simple_ATL\Simple_ATL.h"
#include <iostream.h>
const IID IID_IFirst_ATL = // valeur dans Simple_ATL_i.c
const CLSID CLSID_First_ATL = // valeur dans Simple_ATL_i.c
void main( void )
{
HRESULT hr;
IFirst_ATL *IFirstATL;
hr = CoInitialize( 0 );
Cours semaine 3 jour 1 Cours C++ 85
ATL (32)
if( SUCCEEDED( hr ) )
{
hr = CoCreateInstance(
CLSID_First_ATL,
NULL,
CLSCTX_INPROC_SERVER,
IID_IFirst_ATL,
(void**) &IFirstATL );
if( SUCCEEDED( hr ) )
{
long ReturnValue;
hr = IFirstATL->AddNumbers( 5, 7,
&ReturnValue );
Cours semaine 3 jour 1 Cours C++ 86
ATL (33)
cout << "la somme de 5 + 7 est : ";
cout << ReturnValue << endl;
hr = IFirstATL->Release();
}
else
{
cout << "CoCreateInstance : echec.";
cout << endl;
}
}
CoUninitialize();
}
Cours semaine 3 jour 1 Cours C++ 87
ATL ()
Cours semaine 3 jour 1 Cours C++ 88
ATL (35)
Cours semaine 3 jour 1 Cours C++ 89
ATL (36)
Copiez/collez la ligne de l’IID
Mettez une des deux lignes en
commentaires pour conserver la bonne
information
Dans l’autre ligne, modifier un seul chiffre,
recompiler et exécutez
Cours semaine 3 jour 1 Cours C++ 90
ATL (37)
Cours semaine 3 jour 1 Cours C++ 91
ATL (38)
Le lien avec le serveur placé dans la DLL
est donc fait à l’aide de l’IID et du CLSID
La moindre modification de ces chiffres fait
perdre le lien
En fait, le lien obtenu à travers la registry
est perdu
Cours semaine 3 jour 1 Cours C++ 92
ATL (39)
Cours semaine 3 jour 1 Cours C++ 93
ATL (40)
Les choses se compliquent un peu avec des
exécutables à la place des DLL
Cela peut être pire si c’est distribué
C’est encore plus compliqué avec des MFC
à côté des ATL
Microsoft Visual Studio fait la majeure
partie du code pour vous
NE LE MODIFIER PAS !!!!!
Cours semaine 3 jour 1 Cours C++ 94
Questions / Remarques