2015-07-21 15 views
0

我工作的Outlook插件Outlook插件:在NewMail處理程序與調度指針

我有以下調用,當新郵件到來時,如果用戶發送郵件。

void __stdcall OnNewMail(); 
void __stdcall OnSend(IDispatch * item, bool cancel); 

BEGIN_SINK_MAP(CAddin) SINK_ENTRY_INFO(1,__ uuidof(展望:: ApplicationEvents)/ 調度接口/0x0000F002,OnSend,& OnSendInfo) SINK_ENTRY_INFO(2,__ uuidof(展望:: ApplicationEvents)/ 調度接口/0x0000F003,OnNewMail,& OnNewMailInfo) END_SINK_MAP()

工作正常。

現在我想在NewMail通知處理程序的情況下相同(IDispatch *項)。

,如果我把像這樣:

_ATL_FUNC_INFO OnNewMailInfo = {CC_STDCALL, VT_EMPTY, 0, { VT_DISPATCH | VT_BOOL }}; 
void __stdcall OnNewMail(IDispatch * item, bool cancel); 

我得到的IDispatch NULL指針也崩潰,一旦超出OnNewMail功能。

請建議我去哪裏錯了。

您的恢復是受歡迎的。

+0

你剛剛刪除你的問題(http://stackoverflow.com/questions/36712954/function-call-in-delphi),後我花了很多時間寫一個詳細的答案。我的回答遠遠超出了你實際詢問的問題。這是非常不恰當的! –

回答

0

在我看來,「OnNewMailInfo」 - 結構是不正確的。第三個字段是傳遞給函數的參數個數(根據簽名),第四個是VT _...-常量數組。所以它應該是

_ATL_FUNC_INFO OnNewMailInfo = {CC_STDCALL, VT_EMPTY, 2, { VT_DISPATCH, VT_BOOL }}; 
void __stdcall OnNewMail(IDispatch * item, bool cancel);