2015-07-21 3 views
0

Я работаю на прогноз надстройкеПерспектива Аддин: На ​​NewMail обработчика с диспетчерским указателем

Я имеющая следующие вызовы, которые вызывают, когда приходит новое письмо, и если сенты пользователя почты.

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

BEGIN_SINK_MAP (CAddin) SINK_ENTRY_INFO (1, __ uuidof (Outlook :: ApplicationEvents),/диспинтерфейс/0x0000F002, OnSend, & OnSendInfo) SINK_ENTRY_INFO (2, __ uuidof (Outlook :: ApplicationEvents),/диспетчерский интерфейс/0x0000F003, OnNewMail, & OnNewMailInfo) END_SINK_MAP()

, который работает отлично.

сейчас я хочу такой же (IDispatch * item) в случае NewMail уведомление обработчик.

если я ставлю, как например:

_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);