C ++ получить и установить значения из DialogBox в функции обратного вызова

У меня есть ATL / COM Outlook-AddIn, который активируется, когда пользователь пытается отправить письмо. Если нажать кнопку отправки, появится диалоговое окно. Там я хочу установить тему письма в TextBox и переписать ее в тему, если нажать кнопку ОК. Это должно быть сделано в функции обратного вызова DialogBox. Вот что я получил так далеко:

static BSTR myGlobalVar;

void __stdcall OnItemSend(IDispatch* Item, VARIANT_BOOL* Cancel)
{
CComPtr<Outlook::_MailItem> mail;
HRESULT hr = Item->QueryInterface(__uuidof(Outlook::_MailItem), (void**)&mail); // get the mail item

if (hr == S_OK)
{
IUnknown* mapiItem;
if (mail->get_MAPIOBJECT(&mapiItem) == S_OK)
{
mail->get_Subject(&myGlobalVar); // get the current subject

DialogBox(GetModuleHandle(L"MyDllName.dll"), (LPCWSTR)IDD_DIALOG1, 0, (DLGPROC)About); // open the DialogBox

// here I want to set the subject with the value from the TextBox
mail->put_Subject(&myGlobalVar);
}
}
}

// this is the callback function of the DialogBox
static LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_INITDIALOG:
{
// I want to set the value of IDC_MYTEXT to the subject,
// but I cannot access any global variables from here
SetDlgItemText(hDlg, IDC_MYTEXT, myGlobalVar);

return TRUE;
}

case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
TCHAR szBuf[128];
GetDlgItemText(hDlg, IDC_MYTEXT, szBuf, 128 - 1);

// here I want to set an global accessable variable
myGlobalVar = (BSTR)szBuf;

EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}

break;
}
return FALSE;
}

В функции обратного вызова я не могу получить доступ ни к каким глобальным переменным, которые были бы доступны в OnItemSend, потому что я получаю ошибку компоновщика LNK2001. Какой будет хороший подход для достижения этой цели? Заранее спасибо!

0

Решение

Я наконец-то начал работать, обернув обработку всего диалога в классе и создав экземпляр этого класса в моей функции OnItemSend. Затем я могу получить и установить открытые свойства внутри моей функции, а также статической функции обратного вызова.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]