當寫你自己的MAPI實現是創建一個DLL同時與適當的出口和調用約定,以便系統存根MAPI DLL(C關鍵:\ WINDOWS \ system32 \ mapi32.dll,應該與mapistub.dll相同),以將呼叫傳遞給您的dll。使用__stdcall調用約定調用MAPI函數。同樣重要的是設置正確的註冊表鍵,以便您的系統存根選擇mapi dll,看起來您已經找到了正確的註冊表項,以便指定您的應用程序進行地圖調用時使用的特定地圖。
我剛剛做了這件事:寫了我自己的骨架mapi dll,並且在獲取系統存根調用擴展mapi函數時遇到了很多麻煩。關鍵是mapi32.dll在「foo @ x」入口點調用GetProcAddress,而不是mapi接口中的「foo」入口點,以便測試你的dll是否與擴展mapi「兼容」(我認爲對於簡單mapi稱它不使用「foo @ x」,而是簡單的「foo」入口點名稱)。我還必須在我的項目「作爲C」而不是「作爲C++」中編譯我的骨架庫接口文件,以獲得所有符號名稱。
例如,調用MAPIInitialize應聲明這樣在你的源代碼:
HRESULT __stdcall MAPIInitialize(LPVOID lpMapiInit)
...
,你就需要指定與條目的DEF文件是這樣的:
EXPORTS
[email protected][email protected]
[email protected]
對於簡單mapi調用(而不是擴展的mapi調用),您可能不需要「雙重導出」。爲了看看有什麼出口看起來像一個工作MAPI實現,你可以做到這一點(如果您有您的系統上安裝了Outlook):
c:\> dumpbin /exports c:\Program Files\Common Files\SYSTEM\MSMAPI\1033\msmapi32.dll
(或替代你在HKLM\Software\Clients\Mail\Microsoft Outlook\DLLPathEx
註冊表中找到路徑)
這個問題應該去superuser.com。 – 2009-09-22 07:56:19
Word使用系統上的默認電子郵件應用程序。你將不得不改變這一點。但是,有關軟件的一般用法的問題應該以超級用戶的身份提出。com – 2009-09-22 08:38:23
對不起,我想我說的這個問題很差。我不想更換默認的電子郵件應用程序,而是想知道如何創建「mapi兼容」應用程序的信息,以便稍後我的郵件代理可以替換Outlook。 – goorj 2009-09-22 19:49:42