Windows2003-3790/inetcore/outlookexpress/import/abimport.cpp
2020-09-30 16:53:55 +02:00

218 lines
5.5 KiB
C++

/*
*
* ABImport.c - Code for calling WABIMP.dll to import
* Netscape and Eudora files into WAB
*
* Assumes this will be compiled with wab32.lib, else need to
* loadlibrary("wab32.dll") and call GetProcAddress("WABOpen");
*
* Exported functions:
* HrImportNetscapeAB() - Imports Netscape AB into WAB
* HrImportEudoraAB() - Imports Eudora AB into WAB
*
* Rough cut - vikramm 4/3/97
*
*/
#include "pch.hxx"
#include <wab.h>
#include <wabmig.h>
#include "abimport.h"
#include <impapi.h>
#include <newimp.h>
#include "import.h"
#include "strconst.h"
HRESULT HrImportAB(HWND hWndParent, LPTSTR lpszfnImport);
static CImpProgress *g_pProgress = NULL;
static TCHAR g_szABFmt[CCHMAX_STRINGRES];
/*
*
* ProgressCallback
*
* This is the call back function that updates the progress bar
*
* In the function below, IDC_Progress is the ID of the progress
* bar that will be updated and IDC_MEssage is the ID of the
* static that will display text returned from the WABImp.Dll
* Replace these 2 ids with your own ids...
*
*/
HRESULT ProgressCallback(HWND hwnd, LPWAB_PROGRESS lpProgress)
{
TCHAR sz[CCHMAX_STRINGRES];
Assert(g_pProgress != NULL);
if (lpProgress->denominator)
{
if (lpProgress->numerator == 0)
{
g_pProgress->Reset();
g_pProgress->AdjustMax(lpProgress->denominator);
}
wnsprintf(sz, ARRAYSIZE(sz), g_szABFmt, lpProgress->numerator + 1, lpProgress->denominator);
g_pProgress->SetMsg(sz, IDC_MESSAGE_STATIC);
g_pProgress->HrUpdate(1);
}
return(S_OK);
}
// ===========================================================================
// HrLoadLibraryWabDLL -
// ===========================================================================
HINSTANCE LoadLibraryWabDLL (VOID)
{
TCHAR szDll[MAX_PATH];
TCHAR szExpand[MAX_PATH];
LPTSTR psz;
DWORD dwType = 0;
HKEY hKey;
ULONG cbData = sizeof(szDll);
*szDll = '\0';
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszWABDLLRegPathKey, 0, KEY_READ, &hKey))
{
if (ERROR_SUCCESS == RegQueryValueEx( hKey, "", NULL, &dwType, (LPBYTE) szDll, &cbData))
if (REG_EXPAND_SZ == dwType)
{
ExpandEnvironmentStrings(szDll, szExpand, ARRAYSIZE(szExpand));
psz = szExpand;
}
else
psz = szDll;
RegCloseKey(hKey);
}
if(!lstrlen(psz))
StrCpyN(psz, WAB_DLL_NAME, MAX_PATH);
return(LoadLibrary(psz));
}
/*
*
*
* HrImportAB
*
* Calls the relevant DLL proc and imports corresponding AB
*
*/
HRESULT HrImportAB(HWND hWndParent, LPTSTR lpszfnImport)
{
TCHAR sz[CCHMAX_STRINGRES];
HINSTANCE hinstWabDll;
LPWABOPEN lpfnWABOpen;
LPWABOBJECT lpWABObject = NULL;
LPADRBOOK lpAdrBookWAB = NULL;
HRESULT hResult;
BOOL fFinished = FALSE;
LPWAB_IMPORT lpfnWABImport = NULL;
HINSTANCE hinstImportDll = NULL;
WAB_IMPORT_OPTIONS ImportOptions;
ZeroMemory(&ImportOptions, sizeof(WAB_IMPORT_OPTIONS));
hinstWabDll = LoadLibraryWabDLL();
if (hinstWabDll == NULL)
return(MAPI_E_NOT_INITIALIZED);
lpfnWABOpen = (LPWABOPEN)GetProcAddress(hinstWabDll, szWabOpen);
if (lpfnWABOpen == NULL)
{
hResult = MAPI_E_NOT_INITIALIZED;
goto out;
}
hinstImportDll = LoadLibrary(szImportDll);
if(!hinstImportDll)
{
hResult = MAPI_E_NOT_INITIALIZED;
goto out;
}
if (! (lpfnWABImport = (LPWAB_IMPORT) GetProcAddress(hinstImportDll,lpszfnImport)))
{
hResult = MAPI_E_NOT_INITIALIZED;
goto out;
}
// Flags that can be passed to the WABImp DLL
//
ImportOptions.fNoErrors = FALSE; // Display Pop up errors
ImportOptions.ReplaceOption = WAB_REPLACE_PROMPT; //Prompt user before replacing contacts
if(hResult = lpfnWABOpen(&lpAdrBookWAB, &lpWABObject, NULL, 0))
goto out;
g_pProgress = new CImpProgress;
if (g_pProgress == NULL)
{
hResult = E_OUTOFMEMORY;
goto out;
}
g_pProgress->Init(hWndParent, FALSE);
LoadString(g_hInstImp, idsImportingABFmt, g_szABFmt, ARRAYSIZE(g_szABFmt));
LoadString(g_hInstImp, idsImportABTitle, sz, ARRAYSIZE(sz));
g_pProgress->SetTitle(sz);
LoadString(g_hInstImp, idsImportAB, sz, ARRAYSIZE(sz));
g_pProgress->SetMsg(sz, IDC_FOLDER_STATIC);
g_pProgress->Show(0);
hResult = lpfnWABImport(hWndParent,
lpAdrBookWAB,
lpWABObject,
(LPWAB_PROGRESS_CALLBACK)&ProgressCallback,
&ImportOptions);
if (hResult == MAPI_E_USER_CANCEL)
{
hResult = hrUserCancel;
}
else if (FAILED(hResult))
{
ImpMessageBox( hWndParent,
MAKEINTRESOURCE(idsImportTitle),
MAKEINTRESOURCE(idsABImportError),
NULL,
MB_OK | MB_ICONEXCLAMATION );
}
out:
if (g_pProgress != NULL)
{
g_pProgress->Release();
g_pProgress = NULL;
}
if (lpAdrBookWAB)
lpAdrBookWAB->Release();
if (lpWABObject)
lpWABObject->Release();
if(hinstImportDll)
FreeLibrary(hinstImportDll);
FreeLibrary(hinstImportDll);
return hResult;
}