Lien vers les fonctions MAPI
S’applique à : Outlook 2013 | Outlook 2016
Il existe trois méthodes de liaison : la liaison implicite, la liaison explicite et un nouveau modèle hybride utilisant la bibliothèque stub MAPI.
Liaison implicite
Historiquement, l’appel de fonctions MAPI dans une application de messagerie impliquait toujours la liaison à la bibliothèque Mapi32.lib. Cela comprenait le routage des appels MAPI vers la bibliothèque de stubs MAPI Windows, Mapi32.dll, qui a ensuite transféré les appels à l’implémentation cliente MAPI par défaut au moment de l’exécution. Ce processus d’appel est appelé liaison implicite. Le côté gauche de la figure suivante montre un exemple de liaison implicite utilisée dans un processus d’appel de fonction MAPI. Le processus est initié par une application MAPI et implique la bibliothèque MAPI (Mapi32.lib) et le stub MAPI Windows (Mapi32.dll) et est terminé par l’implémentation cliente MAPI Outlook du stub MAPI (Msmapi32.dll).
Comparaison des liaisons implicites et explicites.
Liaison explicite
Étant donné que le client MAPI par défaut prend en charge l’installation à la demande à l’aide de Windows Installer (MSI), vous pouvez développer des applications de messagerie directement sur le stub MAPI Outlook au lieu d’utiliser la bibliothèque MAPI et le stub MAPI Windows. Le côté droit de la figure précédente montre un exemple de processus d’appel de fonction MAPI, en commençant par une application MAPI recherchant le chemin d’accès et le nom DE DLL pour le stub MAPI Outlook (étape 2 dans la section suivante) et en effectuant des appels de fonction dans le stub MAPI Outlook (étape 3 de la section suivante). La procédure suivante montre comment appeler des fonctions MAPI à l’aide d’une liaison explicite.
Remarque
Ces informations sur la liaison explicite peuvent être superflues pour vos besoins avec l’introduction de MAPIStubLibrary.lib décrite dans la section suivante. À l’instar du modèle implicite, la nouvelle bibliothèque gère tout et implémente la logique de liaison explicite qui charge directement l’interface MAPI d’Outlook.
Pour plus d’informations sur la liaison explicite, consultez Liaison explicite.
Pour appeler des éléments d’API MAPI sans la bibliothèque MAPI et le stub MAPI Windows
Dans votre fichier programme, créez une liste globale de pointeurs de fonction pour chaque élément d’API MAPI que vous utilisez.
L’exemple suivant illustre cette étape.
//Global MAPI function pointers LPMAPIINITIALIZE pfnMAPIInitialize = NULL; LPMAPIUNINITIALIZE pfnMAPIUninitialize = NULL;
Créez une fonction qui initialise les fonctions MAPI à lier à la DLL MAPI du client MAPI par défaut (par exemple, Msmapi32.dll de Microsoft Outlook). Dans cette fonction, procédez comme suit :
Chargez mapi32.dll à partir du répertoire système approprié.
Propriété Valeur x64 ou x86 en mode natif %windir%\system32\mapi32.dll x86 en mode WoW %windir%\syswow64\mapi32.dll Appelez la fonction FGetComponentPath pour obtenir le chemin d’accès et le nom de la DLL qui implémente le sous-système MAPI. Pour plus d’informations, consultez Choisir une version spécifique de MAPI à charger.
Chargez la DLL en appelant la fonction LoadLibrary.
Initialisez le tableau de pointeurs de fonction MAPI en appelant la fonction GetProcAddress.
L’exemple suivant illustre les étapes précédentes :
void InitializeMapiFunctions() { { // Get the DLL path and name of the actual MAPI implementation. FGetComponentPath(g_szMapiComponentGUID, NULL, szMAPIDLL, MAX_PATH); // Load the DLL. hMod = LoadLibrary(szMAPIDLL); // Initialize MAPI functions. pfnMAPIInitialize = GetProcAddress(hMod, "MAPIInitialize"); pfnMAPIUninitialize = GetProcAddress(hMod, "MAPIUninitialize"); }
Enfin, appelez la fonction que vous avez créée à l’étape 2 de votre application de messagerie avant d’effectuer des appels à des éléments d’API MAPI.
Attention
Vous devez annuler l’initialisation du sous-système MAPI avant de fermer votre application.
L’exemple suivant illustre cette étape :
int main() { HRESULT hr; InitializeMapiFunctions(); // Initialize the MAPI subsystem. hr = (*pfnMAPIInitialize)(NULL); if (hr!= S_OK) { // Handle the error case. } // Here is where you make calls to other MAPI interfaces. // Uninitialize the MAPI subsystem. (*pfnMAPIUninitialize)(); return (0); }
MAPIStubLibrary.lib
L’avènement de mapi Microsoft Outlook 2010 et 64 bits, qui s’étend désormais à la Microsoft Outlook 2013, nécessite plus que l’API 32 bits traditionnelle pour une implémentation complète. Un nouveau projet, la bibliothèque de stubs MAPI publiée sur GitHub, remplace mapi32.lib, qui prend en charge la création d’applications MAPI 32 bits et 64 bits. MAPIStubLibrary.lib élimine la nécessité d’établir un lien explicite vers MAPI et, après l’avoir créé, vous pouvez supprimer Mapi32.lib de vos paramètres d’éditeur de liens, en le remplaçant par MAPIStubLibrary.lib ; aucune autre modification de votre code ne doit être nécessaire. Il élimine également la nécessité d’écrire du code LoadLibrary, GetProcAddress et FreeLibrary pour gérer les exportations plus récentes incluses dans ce fichier de bibliothèque, mais pas dans Mapi32.lib, ce qui serait nécessaire si vous utilisiez une liaison explicite.
Voici quelques-unes des nouvelles fonctions liées à partir de cette bibliothèque qui ne sont pas disponibles dans Mapi32.lib :
- GetDefCachedMode
- HrGetGALFromEmsmdbUID
- HrOpenOfflineObj
- MAPICrashRecovery
- OpenStreamOnFileW
- WrapCompressedRTFStreamEx
Une autre méthode d’incorporation de la bibliothèque stub MAPI consiste à copier les fichiers sources, MapiStubLibrary.cpp et StubUtils.cpp, directement dans votre projet et à supprimer toute liaison à Mapi32.lib et tout code qui lie explicitement à MAPI.
Pour accéder aux fichiers de la bibliothèque de stub MAPI et pour plus d’informations sur la façon de les générer et de les intégrer à votre projet, ainsi que pour des questions sur cette bibliothèque, telles que quand et pourquoi l’utiliser, consultez la bibliothèque de stubs MAPI sur GitHub.