Partager via


INPROC, exemple : illustre une application serveur Automation in-process

Mise à jour : novembre 2007

L'exemple INPROC est un serveur Automation (précédemment OLE Automation) in-process. Contrairement aux autres exemples de serveurs Automation MFC, INPROC peut être chargé sous forme de bibliothèque de liens dynamiques (DLL, Dynamic Link Library) dans l'espace d'adressage du client. Les serveurs in-process sont en général plus efficaces que les serveurs implémentés en tant qu'exécutables distincts, ce pour la raison suivante : un appel de procédure à distance (RPC, Remote Procedure Call) n'est pas nécessaire pour appeler des méthodes à partir des objets implémentés par le serveur.

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.

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 et exécution de l'exemple

Pour générer et exécuter l'exemple INPROC

  1. Ouvrez la solution inproc.sln.

  2. Dans le menu Générer, cliquez sur Générer.

  3. Inscrivez la DLL d'INPROC à l'aide du fichier .reg du projet : autrement dit, exécutez regedit INPROC.REG ou utilisez REGSVR à partir de l'exemple REGSVR.)

    Si vous utilisez REGEDIT, vérifiez qu'Inproc.dll se trouve sur le chemin système. Une autre solution consiste à modifier le fichier .reg pour faire explicitement référence au chemin d'accès d'Inproc.dll.

    Une DLL ne peut pas être exécutée de manière autonome, contrairement à un fichier EXE ; c'est pourquoi, pour tester INPROC, vous devez le « piloter » à partir d'une application cliente. INPROC peut être piloté à partir de Visual Basic ou de Visual C++. Pour obtenir un exemple d'exécution d'INPROC à partir de Visual C++, consultez l'exemple IPDRIVE.

    Remarque :

    Vous pouvez générer une version EXE ou DLL d'INPROC. Définissez le variant EXE dans les paramètres du projet de l'exemple. Une version EXE d'INPROC s'inscrit uniquement dans le Registre Windows.

Classes INPROC

La classe CVariantMap implémente un mappage de VARIANT à VARIANT. Cela permet à n'importe quel VARIANT d'être mappé à n'importe quel autre VARIANT. Bien qu'elle ne soit probablement pas utile aux programmeurs en Visual C++ (dont le réflexe serait sans doute d'utiliser directement CMap), cette méthode a le réel avantage d'apporter la puissance des classes de collection MFC aux utilisateurs de Visual Basic. La classe CVariantMap est accessible par le nom mfc.inproc.varmap. C'est ainsi que l'objet est inscrit dans le Registre Windows. CVariantMap implémente les méthodes et propriétés de la collection standard, ainsi que la méthode _NewEnum.

La classe CStringCollect implémente un tableau de chaînes. Son implémentation est plus simple que celle de la classe CVariantMap, même si elles implémente un grand nombre des fonctionnalités Automation de la classe CVariantMap. L'objet CStringCollect est accessible par le nom mfc.inproc.strcoll. Cet objet implémente la plupart des méthodes et propriétés de collection standard et constitue un bon exemple pour l'implémentation de vos propres collections. Son implémentation de la méthode _NewEnum est particulièrement intéressante, car elle permet aux utilisateurs de Visual Basic d'utiliser la syntaxe For Each... In pour énumérer le contenu d'une collection. CStringCollect utilise CEnumVariant pour implémenter ces fonctionnalités (il implémente IEnumVARIANT à l'aide des mappages d'interfaces MFC). CEnumVariant peut vous être utile dans vos propres applications.

Enfin, l'exemple implémente quelques propriétés factices, qui permettent seulement de comparer les performances des serveurs in-process et celles des serveurs LocalServer. Il s'agit des propriétés testées par les boutons Test1 et Test2 d'IPDRIVE.

Mots clés

Cet exemple illustre l'utilisation des mots clés suivants :

AfxIsValidAddress ; AfxMessageBox ; AfxOleInit ; AfxOleLockApp ; AfxOleUnlockApp ; AfxThrowMemoryException ; AfxThrowOleException ; CCmdTarget::EnableAutomation ; CCmdTarget::GetIDispatch ; CCmdTarget::OnFinalRelease ; CString::AllocSysString ; CWinApp::InitInstance ; CWinApp::RunAutomated ; CWinApp::RunEmbedded ; DllCanUnloadNow ; DllGetClassObject ; min

Voir aussi

Autres ressources

Exemples MFC