2015-08-11 8 views
7

पर रिलीज हैंडल मैं वर्तमान में माइक्रोसॉफ्ट आउटलुक के लिए सी # .NET एड-इन पर काम कर रहा हूं। ऐड-इन का लक्ष्य Outlook त्वरित खोज से खोज इनपुट कैप्चर करने के लिए है, और एक कस्टम फलक में अपने स्वयं के खोज परिणामों में दिखाएं।मूल विंडो:

यह बहुत अच्छी तरह से काम करता है, और एक मूल विंडो के साथ आउटलुक विंडो को उपclassing के साथ, मुझे खोज स्ट्रिंग मिलती है, और यह पहले से ही मेरे पैनल में गुजरती है।

समस्या

अब है, कि आप ऐड-में बंद करते हैं ("फ़ाइल> विकल्प> ऐड-Ins-> COM ऐड-इन्स" फलक में एक्स के साथ है, लेकिन नहीं के माध्यम से) , एड-इन तुरंत समाप्त हो जाता है और मैं अपनी WNDProc श्रृंखला को पुनर्स्थापित करने के लिए पहले से searchboxWindow.ReleaseHandle() पर कॉल नहीं कर सकता। आउटलुक बस बिना किसी दृश्य त्रुटियों के दुर्घटनाग्रस्त हो जाता है।

protected override void WndProc(ref Message m) 
{ 
    base.WndProc(ref m); 

    switch ((uint)m.Msg) 
    { 
     case WindowMessages.WM_DESTROY: 
     case WindowMessages.WM_QUIT: 
     case WindowMessages.WM_NCDESTROY: 
      this.ReleaseHandle(); 
      return; 

     case WindowMessages.WM_KEYUP: 
     case WindowMessages.WM_LBUTTONDOWN: 
     case WindowMessages.WM_RBUTTONDOWN: 
      OnKeyUp(); 
      break; 

     case WindowMessages.WM_EXITSIZEMOVE: 
      OnResize(); 
      break; 
    } 
} 

मैं पहले से ही कुछ विंडो संदेश है कि जब ऐड-में बंद कर दिया जाता है बुलाया जाना चाहिए को सुनने के लिए कोशिश की, लेकिन इन संदेशों को केवल दिखाई देते हैं जब मैं एक सामान्य तरीके से आउटलुक को बंद करें।

इसके अलावा, मुख्य एड-इन स्रोत फ़ाइल जैसे AppDomain.CurrentDomain.ProcessExit, this.Shutdown, या ((Outlook.ApplicationEvents_10_Event)this.Application).Quit पर ईवेंट न कहें।

ऐड-इन समाप्त होने पर उस पर कौन सा ईवेंट सुन सकता है (विश्वसनीय रूप से) निकाल दिया जाता है? क्या वहाँ कुछ है? यदि नहीं, तो मेरी समस्या का समाधान करने के मेरे पास क्या विकल्प हैं?

+0

क्या आपने डिप्लोस() को आजमाया था और यह सुनिश्चित करने के लिए डिप्लोज्ड इवेंट को एक विधि संलग्न कर रहा था कि यह वास्तव में निपटाया गया हो? –

+0

मैंने आईडीस्पोजेबल इंटरफेस को कार्यान्वित किया और रिलीजहैंडल() को वहां बुलाया, लेकिन इसका कोई प्रभाव नहीं पड़ा? क्या यही मतलब है तुम्हारा? –

+3

विंडो को अन-सबक्लास करने के लिए अपने ऐड-इन के शटडाउन ईवेंट का उपयोग करें। ऑटो-जेनरेटेड ThisAddIn_Shutdown() इवेंट हैंडलर में डरावनी भाषा है लेकिन यह अभी भी इस विशिष्ट परिदृश्य में उठाई गई है। –

उत्तर

1

हल: को धन्यवाद हंस Passant

यह वास्तव में लगता है कि ThisAddIn_Shutdown ईवेंट ट्रिगर जब ऐड-में मैन्युअल रूप से COM ऐड-इन्स संवाद बॉक्स के माध्यम से डिस्कनेक्ट कर रहा है।

0

मुझे नहीं लगता कि प्रबंधित कोड में आप बहुत कुछ कर सकते हैं। Unmamaged कोड ठीक काम किया होगा; COM सिस्टम आपको विनम्रता से पूछेगा कि क्या आपके डीएल को DllCanUnload के कार्यान्वयन को कॉल करके अनलोड किया जा सकता है।

+0

तो मूल रूप से मैं कुछ भी नहीं कर सकता जब तक कि मैं अपनी परियोजना को सी ++ या इसी तरह से लिखता हूं? –

+0

मैं प्रबंधित कोड में ऐसा करने का तरीका नहीं सोच सकता। –

संबंधित मुद्दे