如何在 Microsoft Outlook 中找出 Mapisvc.inf 檔案的正確路徑

文章翻譯 文章翻譯
文章編號: 229700 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

Microsoft Outlook 會顯露 Mapistub.dll 檔案中的 FGetComponentPath 函數,以協助您尋找 Mapisvc.inf 檔案的路徑。本文將告訴您,如何利用<其他相關資訊>一節中的程式碼範例,尋找 Mapisvc.Inf 檔案的路徑。

在 Microsoft Outlook 2000 之前的版本中,Mapisvc.inf 檔案一直是安裝在系統目錄之下,如同 Win32 API GetSystemDirectory 函數所傳回的內容。

其他相關資訊

注意 下列程式碼範例向後相容於所有舊版 Outlook。無論 Mapisvc.inf 檔案是否存在於系統目錄下,下列程式碼範例都會尋找 Mapisvc.inf 檔案的路徑。
typedef BOOL (STDAPICALLTYPE FGETCOMPONENTPATH)
(LPSTR szComponent,
LPSTR szQualifier,
LPSTR szDllPath,
DWORD cchBufferSize,
BOOL fInstall);
typedef FGETCOMPONENTPATH FAR * LPFGETCOMPONENTPATH;    

/////////////////////////////////////////////////////////////////////////////// 
// Function name    :InitMAPIDir
// Description      :For Outlook 2000 compliance.This will get the correct path to the
//                  : MAPISVC.INF file.
// Return type      :void 
// Argument         :LPSTR szMAPIDir - Buffer to hold the path to the MAPISVC file.
//                  : ULONG cchINIFileName - size of szMAPIDir
void InitMAPIDir(LPSTR szINIFileName, ULONG cchINIFileName)
{
UINT uiRet = 0;
CHAR szSystemDir[MAX_PATH+1] = {0};

// Get the system directory path
// (mapistub.dll and mapi32.dll reside here)
uiRet = GetSystemDirectoryA(szSystemDir, MAX_PATH);
if(uiRet > 0)
    {
HRESULT hRes = S_OK;
CHAR szDLLPath[MAX_PATH+1] = {0};

hRes = StringCchPrintfA(szDLLPath, MAX_PATH+1, "%s\\%s", 
szSystemDir, "mapistub.dll");
if(SUCCEEDED(hRes))
        {
LPFGETCOMPONENTPATH pfnFGetComponentPath = NULL;

HMODULE hmodStub = 0;
HMODULE hmodMapi32 = 0;

// Load mapistub.dll
hmodStub = LoadLibraryA(szDLLPath);
if(hmodStub)
            {   
// Get the address of FGetComponentPath from the mapistub
pfnFGetComponentPath = (LPFGETCOMPONENTPATH)GetProcAddress(
hmodStub, "FGetComponentPath");
            }

// If we didn't get the address of FGetComponentPath
// try mapi32.dll
if(!pfnFGetComponentPath)
            {
hRes = StringCchPrintfA(szDLLPath, MAX_PATH+1, "%s\\%s", 
szSystemDir, "mapi32.dll");
if(SUCCEEDED(hRes))
                {
// Load mapi32.dll
hmodMapi32 = LoadLibraryA(szDLLPath);
if(hmodMapi32)
                    {
// Get the address of FGetComponentPath from mapi32
pfnFGetComponentPath = (LPFGETCOMPONENTPATH)GetProcAddress(
hmodMapi32, "FGetComponentPath");
                    }
                }
            }

BOOL bRet = FALSE;

if(pfnFGetComponentPath)
            {
// Now that we have the address of FGetComponentPath
// Let's call it with the GUID for mapisvc.inf
bRet = pfnFGetComponentPath(
"{473FF9A0-D659-11D1-A4B2-006008AF820E}",
NULL, szINIFileName, cchINIFileName, TRUE); 
            }

// If FGetComponentPath returns FALSE or if
// it returned nothing, or if we never found an
// address of FGetComponentPath, then
// just default to the system directory
if(!bRet || szINIFileName[0] == '\0')
            {
hRes = StringCchPrintfA(szINIFileName, cchINIFileName,
"%s\\%s", szSystemDir, "mapisvc.inf");
            }

if(hmodMapi32)
FreeLibrary(hmodMapi32);

if(hmodStub)
FreeLibrary(hmodStub);
        }
    }
}

屬性

文章編號: 229700 - 上次校閱: 2005年12月14日 - 版次: 5.2
這篇文章中的資訊適用於:
  • Microsoft Office Outlook 2003
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft Outlook 2000 Standard Edition
  • Microsoft Messaging Application Programming Interface
關鍵字:?
kbhowto kbmsg kbfaq KB229700
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com