ACDUAL, exemple : ajoute des interfaces doubles à une application Automation
Mise à jour : novembre 2007
ACDual montre comment ajouter la prise en charge d'interfaces doubles à une application Automation (précédemment OLE Automation) MFC. La solution se compose des projets suivants :
ACDualDriv, qui contient une version du projet AUTODRIV client Automation vous permettant de choisir de contrôler l'application serveur à l'aide de l'interface de dispatch ou de la liaison vtable.
ACDual, qui contient une version du projet AUTOCLIK serveur Automation avec une prise en charge des interfaces doubles.
Note de sécurité : |
---|
Cet exemple de code est fourni pour illustrer un concept et ne doit pas être utilisé dans des applications ou des sites Web, car il peut ne pas illustrer les pratiques de programmation les plus sûres. Microsoft n'assume aucune responsabilité pour tout dommage indirect ou consécutif en cas d'utilisation de l'exemple de code à des fins autres que celles prévues. |
Pour obtenir des exemples et des instructions d'installation :
Dans le menu ? (Aide) de Visual Studio, cliquez sur Exemples.
Pour plus d'informations, consultez Recherche des fichiers d'exemple.
La liste la plus récente et la plus complète d'exemples est disponible en ligne à partir de la page Visual Studio 2008 Samples.
Des exemples sont également disponibles sur le disque dur de votre ordinateur. Des exemples et un fichier Readme sont copiés par défaut dans un dossier sous \Program Files\Visual Studio 9.0\Samples\. Pour les éditions Express de Visual Studio, tous les exemples sont accessibles en ligne.
Génération de l'exemple
Pour générer l'exemple ACDual
Ouvrez la solution acdual.sln, située dans le répertoire acdual.
Dans le menu Générer, cliquez sur Générer.
Exécutez ACDual une fois en tant qu'application autonome pour lui permettre de s'inscrire dans le système.
Exécution de l'exemple
Après avoir inscrit l'application ACDual, vous êtes prêt à exécuter l'application ACDualDriv. La génération de la solution à partir de l'interface IDE entraîne l'inscription automatique d'ACDualDriv avant son exécution. ACDualDriv lance l'application ACDual et crée un objet Document, que vous pouvez ensuite manipuler à l'aide d'Automation via l'interface utilisateur ACDualDriv. L'application comporte également une case à cocher supplémentaire, qui vous permet de choisir d'utiliser ou non la liaison VTBL pour communiquer avec l'objet Document ACDual.
Le serveur ACDual utilise AUTOCLIK comme point de départ. De nouveaux identificateurs globaux uniques (GUID) ont été générés pour empêcher toute confusion avec l'exemple AUTOCLIK d'origine et certaines chaînes de ressources ont été modifiées afin de permettre de déterminer si le serveur ACDual est en cours d'exécution. Toutes les autres modifications apportées aux sources sont signalées par des blocs de commentaires de ce type :
// DUAL_SUPPORT_START
... modified code goes here
// DUAL_SUPPORT_END
Pour plus d'informations sur les interfaces doubles, les scripts ODL (Object Description Language) et les interfaces d'erreur Automation, consultez la note technique 65.
Interfaces doubles
Une interface double vous permet d'implémenter une interface IDispatch ou une interface VTBL. Il est fortement recommandé d'utiliser une interface double pour tous les objets Automation exposés. Les différents éléments à prendre en compte lors de l'implémentation d'une interface double sont indiqués dans la note technique 65, notamment :
implémentation de la prise en charge d'une interface double pour les classes basées sur CCmdTarget ;
passage des pointeurs d'interface double ;
activation de la liaison de type sécurisé, y compris :
inscription du type de bibliothèque de l'application ;
modification des paramètres de génération des projets pour tenir compte des changements de la bibliothèque de types ;
spécification du nom de classe d'objets correct dans une bibliothèque de types ;
gestion des exceptions et de l'interface d'erreur Automation.
Pour plus d'informations, consultez les rubriques ActiveX Overview of Automation, Interfaces doubles, Automation Type Description Interfaces et l'entrée de la référence ODL sur l'attribut dual.
Remarque : |
---|
Certains exemples, tels que celui-ci, n'ont pas été modifiés pour refléter les changements apportés aux Assistants, aux bibliothèques et au compilateur Visual C++, mais ils illustrent bien l'exécution de la tâche souhaitée. |
Mots clés
L'exemple ACDual illustre les mots clés suivants :
AfxMessageBox ; AfxOleInit ; AfxOleLockApp ; AfxOleUnlockApp ; CCmdTarget::EnableAutomation ; CCmdTarget::FromIDispatch ; CCmdTarget::GetIDispatch ; CCmdTarget::OnFinalRelease ; CControlBar::EnableDocking ; CControlBar::GetBarStyle ; CControlBar::SetBarStyle ; CDialog::DoModal ; CDocument::GetFirstViewPosition ; CDocument::GetNextView ; CDocument::OnNewDocument ; CDocument::SetModifiedFlag ; CDocument::UpdateAllViews ; CFrameWnd::ActivateFrame ; CFrameWnd::DockControlBar ; CFrameWnd::EnableDocking ; CFrameWnd::LoadFrame ; CObject::AssertValid ; CObject::Dump ; CObject::IsKindOf ; CObject::Serialize ; COleTemplateServer::ConnectTemplate ; COleTemplateServer::UpdateRegistry ; CStatusBar::Create ; CStatusBar::SetIndicators ; CToolBar::Create ; CView::DoPreparePrinting ; CView::GetDocument ; CView::OnBeginPrinting ; CView::OnDraw ; CView::OnEndPrinting ; CView::OnPreparePrinting ; CWinApp::AddDocTemplate ; CWinApp::EnableShellOpen ; CWinApp::InitInstance ; CWinApp::LoadStdProfileSettings ; CWinApp::RegisterShellFileTypes ; CWnd::DoDataExchange ; CWnd::GetParentFrame ; CWnd::OnCreate ; CWnd::OnLButtonDown ; CWnd::PreCreateWindow ; CWnd::ShowWindow ; CWnd::UpdateWindow ; DragAcceptFiles ; ShowWindow ; TextOut
ACDualDriv illustre les mots clés suivants :
AfxGetApp ; AfxMessageBox ; AfxOleInit ; CDC::DrawIcon ; CDC::GetSafeHdc ; CDialog::DoModal ; CDialog::EndDialog ; COleDispatchDriver::AttachDispatch ; COleDispatchDriver::GetProperty ; COleDispatchDriver::InvokeHelper ; COleDispatchDriver::SetProperty ; CRect::Height ; CRect::Width ; CWinApp::InitInstance ; CWinApp::LoadStdProfileSettings ; CWnd::DoDataExchange ; CWnd::GetClientRect ; CWnd::IsIconic ; CWnd::OnClose ; CWnd::OnCreate ; CWnd::OnPaint ; CWnd::OnQueryDragIcon ; CWnd::SendMessage ; CWnd::ShowWindow ; CWnd::UpdateData ; GetSystemMetrics ; LoadIcon ; ShowWindow