Ich habe ein ATL/COM Outlook-AddIn, das aktiviert wird, wenn der Benutzer versucht, eine E-Mail zu senden. Wenn der Sendetaste geklickt wird, erscheint eine DialogBox. Dort möchte ich den Betreff der Mail in eine TextBox setzen und diesen auf den Betreff umschreiben, wenn die OK-Taste angeklickt wird. Dies sollte in der Callback-Funktion der DialogBox erfolgen. Hier ist, was ich habe, so weit:C++ Abrufen und setzen Werte von DialogBox in Callback-Funktion
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;
}
In der Callback-Funktion, die ich keine globalen Variablen zugreifen können, die in OnItemSend ebenfalls vorhanden sein würde, weil ich einen Linkerfehler LNK2001 erhalten. Was wäre ein guter Ansatz, um dies zu erreichen? Danke im Voraus!