0
私はATL/COM Outlook-AddInを持っています。これは、ユーザーがメールを送信しようとするとアクティブになります。送信ボタンをクリックすると、ダイアログボックスが表示されます。そこで、TextBoxにメールの件名を設定し、OKボタンをクリックすると件名に書き換えたいと思います。これは、DialogBoxのコールバック関数で行う必要があります。ここで私はこれまで得たものである:C++はコールバック関数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;
}
私は、リンカエラーLNK2001を取得しているため、同様OnItemSendで利用可能な任意のグローバル変数にアクセスすることはできません。これを達成するための良いアプローチは何でしょうか?前もって感謝します!