mapi32: Load and store MAPI function pointers after loading MAPI providers.
authorOwen Rudge <orudge@codeweavers.com>
Fri, 18 Sep 2009 14:15:40 +0000 (15:15 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Fri, 18 Sep 2009 16:03:36 +0000 (11:03 -0500)
dlls/mapi32/util.c
dlls/mapi32/util.h

index 6044749991f00d30d9d694d108bb9e7c4ade6de1..6a6a5cd07aa2f9d0e08efea8007d73e946a74c53 100644 (file)
@@ -48,6 +48,8 @@ static const BYTE digitsToHex[] = {
   0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,10,11,12,13,
   14,15 };
 
+MAPI_FUNCTIONS mapiFunctions;
+
 /**************************************************************************
  *  ScInitMapiUtil (MAPI32.33)
  *
@@ -1029,6 +1031,33 @@ void load_mapi_providers(void)
     load_mapi_provider(hkeyMail, regkey_dllpath, &mapi_provider);
     load_mapi_provider(hkeyMail, regkey_dllpath_ex, &mapi_ex_provider);
 
+    /* Now try to load our function pointers */
+    ZeroMemory(&mapiFunctions, sizeof(mapiFunctions));
+
+    /* Simple MAPI functions */
+    if (mapi_provider)
+    {
+        mapiFunctions.MAPIAddress = (void*) GetProcAddress(mapi_provider, "MAPIAddress");
+        mapiFunctions.MAPIDeleteMail = (void*) GetProcAddress(mapi_provider, "MAPIDeleteMail");
+        mapiFunctions.MAPIDetails = (void*) GetProcAddress(mapi_provider, "MAPIDetails");
+        mapiFunctions.MAPIFindNext = (void*) GetProcAddress(mapi_provider, "MAPIFindNext");
+        mapiFunctions.MAPILogoff = (void*) GetProcAddress(mapi_provider, "MAPILogoff");
+        mapiFunctions.MAPILogon = (void*) GetProcAddress(mapi_provider, "MAPILogon");
+        mapiFunctions.MAPIReadMail = (void*) GetProcAddress(mapi_provider, "MAPIReadMail");
+        mapiFunctions.MAPIResolveName = (void*) GetProcAddress(mapi_provider, "MAPIResolveName");
+        mapiFunctions.MAPISaveMail = (void*) GetProcAddress(mapi_provider, "MAPISaveMail");
+        mapiFunctions.MAPISendDocuments = (void*) GetProcAddress(mapi_provider, "MAPISendDocuments");
+        mapiFunctions.MAPISendMail = (void*) GetProcAddress(mapi_provider, "MAPISendMail");
+    }
+
+    /* Extended MAPI functions */
+    if (mapi_ex_provider)
+    {
+        mapiFunctions.MAPIInitialize = (void*) GetProcAddress(mapi_ex_provider, "MAPIInitialize");
+        mapiFunctions.MAPILogonEx = (void*) GetProcAddress(mapi_ex_provider, "MAPILogonEx");
+        mapiFunctions.MAPIUninitialize = (void*) GetProcAddress(mapi_ex_provider, "MAPIUninitialize");
+    }
+
 cleanUp:
     RegCloseKey(hkeyMail);
     HeapFree(GetProcessHeap(), 0, appKey);
index 450d671c1a501607067f03e2ef4fd7eeb806ead9..69b160372f1379019cffcae58b6ea1e54dc05127 100644 (file)
 
 #define _MAPI_UTIL_H
 
+#include <mapi.h>
+#include <mapix.h>
+
 extern void load_mapi_providers(void);
 extern void unload_mapi_providers(void);
 
+typedef struct MAPI_FUNCTIONS {
+    LPMAPIADDRESS        MAPIAddress;
+    LPMAPIDELETEMAIL     MAPIDeleteMail;
+    LPMAPIDETAILS        MAPIDetails;
+    LPMAPIFINDNEXT       MAPIFindNext;
+    LPMAPIINITIALIZE     MAPIInitialize;
+    LPMAPILOGOFF         MAPILogoff;
+    LPMAPILOGON          MAPILogon;
+    LPMAPILOGONEX        MAPILogonEx;
+    LPMAPIREADMAIL       MAPIReadMail;
+    LPMAPIRESOLVENAME    MAPIResolveName;
+    LPMAPISAVEMAIL       MAPISaveMail;
+    LPMAPISENDMAIL       MAPISendMail;
+    LPMAPISENDDOCUMENTS  MAPISendDocuments;
+    LPMAPIUNINITIALIZE   MAPIUninitialize;
+} MAPI_FUNCTIONS;
+
+extern MAPI_FUNCTIONS mapiFunctions;
+
 #endif