2016-12-21 4 views
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で利用可能な任意のグローバル変数にアクセスすることはできません。これを達成するための良いアプローチは何でしょうか?前もって感謝します!

答えて

0

私は最終的に、クラス内のダイアログ処理全体をラップして、このクラスのインスタンスを自分のOnItemSend関数で作成することで作業しました。私は関数と静的コールバック関数の内部からパブリックプロパティを取得して設定することができます。

関連する問題