2025-04-27 07:49:33 -04:00

245 lines
4.4 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <mapi.h>
#define Assert(cond) { \
if (! (cond)) { \
printf("Error on line: %d\n", __LINE__); \
exit(-1); \
} \
}
#define Error(arg) printf arg
#define ErrorExit(arg) { printf arg; exit(-1); }
//
// Global variables used for accessing MAPI services
//
static HINSTANCE hLibMapi = NULL;
ULONG lhMapiSession = 0;
LPMAPILOGON lpfnMAPILogon = NULL;
LPMAPILOGOFF lpfnMAPILogoff = NULL;
LPMAPIADDRESS lpfnMAPIAddress = NULL;
LPMAPIFREEBUFFER lpfnMAPIFreeBuffer = NULL;
//
// Global variables used for accessing MAPI services
//
static HINSTANCE hLibMAPI = NULL;
BOOL
InitMapiServices(
VOID
)
/*++
Routine Description:
Initialize Simple MAPI services if necessary
Arguments:
NONE
Return Value:
TRUE if successful, FALSE otherwise
--*/
{
//
// Load MAPI32.DLL into memory if necessary
//
if (hLibMapi == NULL && (hLibMapi = LoadLibrary(TEXT("MAPI32.DLL")))) {
//
// Get pointers to various Simple MAPI functions
//
lpfnMAPILogon = (LPMAPILOGON) GetProcAddress(hLibMapi, "MAPILogon");
lpfnMAPILogoff = (LPMAPILOGOFF) GetProcAddress(hLibMapi, "MAPILogoff");
lpfnMAPIAddress = (LPMAPIADDRESS) GetProcAddress(hLibMapi, "MAPIAddress");
lpfnMAPIFreeBuffer = (LPMAPIFREEBUFFER) GetProcAddress(hLibMapi, "MAPIFreeBuffer");
if (!lpfnMAPILogon || !lpfnMAPILogoff || !lpfnMAPIAddress || !lpfnMAPIFreeBuffer) {
//
// Clean up properly in case of error
//
FreeLibrary(hLibMapi);
hLibMapi = NULL;
}
}
return hLibMapi != NULL;
}
VOID
DeinitMapiServices(
VOID
)
/*++
Routine Description:
Deinitialize Simple MAPI services if necessary
Arguments:
NONE
Return Value:
NONE
--*/
{
if (hLibMapi) {
if (lhMapiSession)
lpfnMAPILogoff(lhMapiSession, 0, 0, 0);
lhMapiSession = 0;
FreeLibrary(hLibMapi);
hLibMapi = NULL;
}
}
VOID
DoMapiLogon(
HWND hDlg
)
/*++
Routine Description:
Logon MAPI to in order to access address book
Arguments:
hDlg - Handle to the fax recipient wizard page
Return Value:
NONE
Note:
_TODO_
MAPI is not Unicoded enabled on NT!!!
Must revisit this code once that's fixed.
--*/
{
//
// Check if we're already logged on to MAPI
//
if (lpfnMAPILogon(0,
"davidx",
NULL,
MAPI_LOGON_UI,
0,
&lhMapiSession) != SUCCESS_SUCCESS)
{
Error(("MAPI logon failed\n"));
lhMapiSession = 0;
}
}
VOID
DoAddressBook(
VOID
)
{
lpMapiRecipDesc pNewRecips;
ULONG nNewRecips, recipIndex;
LONG status;
//
// Initialize MAPI services
//
if (! InitMapiServices()) {
Error(("InitMapiServices failed\n"));
return;
}
//
// Logon to MAPI
//
DoMapiLogon(NULL);
//
// Present the address dialog
//
status = lpfnMAPIAddress(lhMapiSession, 0, NULL, 1, NULL, 0, NULL,
MAPI_LOGON_UI, 0, &nNewRecips, &pNewRecips);
if (status != SUCCESS_SUCCESS) {
Error(("MAPIAddress failed: %d\n", status));
return;
}
//
// Dump out each selected recipient
//
for (recipIndex=0; recipIndex < nNewRecips; recipIndex++) {
printf("Name: %s, Address: %s\n",
pNewRecips[recipIndex].lpszName,
pNewRecips[recipIndex].lpszAddress);
}
if (pNewRecips)
lpfnMAPIFreeBuffer(pNewRecips);
}
INT _cdecl
main(
INT argc,
CHAR **argv
)
{
INT buffer[1024], index;
for (index=0; index < 1024; index++)
buffer[index] = index ^ 0x12345678;
DoAddressBook();
DeinitMapiServices();
for (index=0; index < 1024; index++)
Assert(buffer[index] == (index ^ 0x12345678));
return 0;
}