2009-09-22 10 views
1

Microsoft Word具有「作爲附件發送」功能,該功能在附帶文檔的Outlook中創建新消息。如何創建MAPI32.dll存根以便能夠從MS Word「作爲附件發送」?

我想用自定義郵件代理替換Outlook,但我不知道如何實現這一點。現在,我的郵件代理只是一個運行的程序,並將文件名作爲參數。

據我所知,「作爲附件發送」是使用一些叫做MAPI的DLL/API。我需要更改我的應用程序,以便它不會簡單地接受文件名參數,但可以接收MS Word在「作爲附件發送」時使用的MAPI(?)調用。

此外,我需要通過創建我自己的MAPI32.dll存根,它只是重定向到我的應用程序來更改默認的郵件代理。

我會很感激,如果有人有更多的信息可以實現這個目標!

+2

這個問題應該去superuser.com。 – 2009-09-22 07:56:19

+0

Word使用系統上的默認電子郵件應用程序。你將不得不改變這一點。但是,有關軟件的一般用法的問題應該以超級用戶的身份提出。com – 2009-09-22 08:38:23

+1

對不起,我想我說的這個問題很差。我不想更換默認的電子郵件應用程序,而是想知道如何創建「mapi兼容」應用程序的信息,以便稍後我的郵件代理可以替換Outlook。 – goorj 2009-09-22 19:49:42

回答

1

當寫你自己的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註冊表中找到路徑)

0

好的,回答我自己的問題。我需要建立一個定義了「MAPISendDocuments」和/或「MAPISendMail」函數的DLL。

此DLL可以有任何名稱,並在HKLM/Software/Clients/Mail/MyMailApp/DLLPath的註冊表中引用。

找到例子採用Delphi ...

+0

小心分享你在哪裏找到Delphi的例子?我搜索了幾天。 :) – Joshua 2012-04-29 19:11:54

+0

已經很久了,我不記得了,對不起!我注意到在網上有很多涉及Delphi的例子,但我不確定哪些是我正在看的。我記得也在做代碼搜索,嘗試使用MAPI關鍵字搜索delphi代碼! – goorj 2012-05-04 11:18:48

+0

感謝goorj,試過了,似乎無法找到。 :) – Joshua 2012-05-11 06:05:47

相關問題