2012-10-24 17 views
8

को पूर्णांक पास करना मैं एक वीएसटीओ 2010 वर्ड एडिन विकसित करने की कोशिश कर रहा हूं। इसमें एक उलटी गिनती टाइमर (उपयोगकर्ता नियंत्रण) के साथ एक कस्टम कार्य फलक है। आइडिया यह है कि जब एक शब्द दस्तावेज़ खोला जाता है तो कुल समय (घंटों और मिनटों में) एडिन को पास किया जाता है जो बदले में इसे उलटी गिनती टाइमर नियंत्रण में भेज देता है। जब मैं वीएस -2010 में एडिन चलाता हूं और उपयोगकर्ता को दो पूर्णांक मानों को नियंत्रित करता हूं, तो addin_Startup में घंटे और मिनट यह ठीक काम करता है।वीएसटीओ 2010 वर्ड एडिन

अब मैं एएसपीनेट पेज से बटन क्लिक पर एक शब्द दस्तावेज़ खोलने की कोशिश कर रहा हूं। जब मैं बटन पर क्लिक करता हूं तो एक शब्द दस्तावेज़ खोलना चाहिए और घंटों में समय और मिनट को एडिन को पास किया जाना चाहिए जो इसे उपयोगकर्ता नियंत्रण में दे देगा और टाइमर को दिए गए समय के लिए चलाना चाहिए।

समस्या यह नहीं है कि मैं यह समझ नहीं सकता कि एडिन में दो पूर्णांक कैसे पास करें और उन्हें कहां पास किया जाए। के बाद जो कभी कभी "महासंकट विफलता त्रुटि" और अन्य समय देना यह मुझे देता है मेरी कोड है

ThisAddin कक्षा

namespace MyWordAddin 
{ 
    public partial class ThisAddIn 
    { 
     private ctlClock myUserControl; 
     private Microsoft.Office.Tools.CustomTaskPane myCustomTaskPane; 
     private int hour, min; 
     private AddInUtilities utilities; 

     protected override object RequestComAddInAutomationService() 
     { 
      if (utilities == null) 
      { 
       utilities = new AddInUtilities(); 
      } 
      return utilities; 
     } 

     public int Min 
     { 
      get { return min; } 
      set { min = value; } 
     } 

     public int Hour 
     { 
      get { return hour; } 
      set { hour = value; } 
     } 


     public Microsoft.Office.Tools.CustomTaskPane MyCustomTaskPane 
     { 
      get { return myCustomTaskPane; } 
      set { myCustomTaskPane = value; } 
     } 

     public void ThisAddIn_Startup(object sender, System.EventArgs e) 
     { 
      //MessageBox.Show("Start Up Called"); 
      myCustomTaskPane.VisibleChanged += new EventHandler(myCustomTaskPane_VisibleChanged); 

     } 
     public void setTime(int h, int m) 
     { 
      Hour = h; 
      Min = m; 
      myUserControl = new ctlClock(Hour, Min); 
      //myUserControl = new ctlClock(0, 1); 
      myCustomTaskPane = this.CustomTaskPanes.Add(myUserControl, "Remaining Time"); 
      myCustomTaskPane.Visible = true; 
     } 

     private void yCustomTaskPane_VisibleChanged(object sender, System.EventArgs e) 
     { 
      Globals.Ribbons.ManageTaskPaneRibbon.toggleButton1.Checked = myCustomTaskPane.Visible; 
     } 

     private void ThisAddIn_Shutdown(object sender, System.EventArgs e) 
     { 
     } 
"प्रकार के COM वस्तु 'सिस्टम .__ ComObject' कास्ट करने के लिए इंटरफेस करने प्रकार 'MyWordAddin.IAddInUtilities' में असमर्थ"

AddinUtilities वर्ग

namespace MyWordAddin 
{ 
    [ComVisible(true)] 
    [InterfaceType(ComInterfaceType.InterfaceIsDual)] 
    public interface IAddInUtilities 
    { 
     void setAddinTime(int h, int min); 
    } 

    [ComVisible(true)] 
    //[Serializable()] 
    [ClassInterface(ClassInterfaceType.None)] 
    public class AddInUtilities : StandardOleMarshalObject,IAddInUtilities 
    { 
     public void setAddinTime(int hour, int min) 
     { 
      Globals.ThisAddIn.setTime(hour, min);   

     } 

    } 


} 

नियंत्रक आवेदन जो शब्द दस्तावेज़ को खोलने और ऐड

के लिए दो पूर्णांकों भेजने का प्रयास करता

जब मैं नियंत्रक एप्लिकेशन चलाता हूं, तो स्टार्ट बटन पर क्लिक करें, यह मुझे कुछ बार "आपदाजनक विफलता" देता है, दूसरी बार यह मुझे "प्रकार की COM ऑब्जेक्ट को कास्ट करने में असमर्थ" सिस्टम देता है। इंटरफ़ेस टाइप करने के लिए 'ComObject' 'MyWordAddin। IAddInUtilities '"और कभी-कभी यह कोड की आखिरी पंक्ति पर अटक जाता है जिसमें कहा गया है" एक ऑब्जेक्ट उदाहरण पास नहीं हुआ है और ऑब्जेक्ट "। मैंने बोल्ड को उस कोड का चयन किया है जहां त्रुटि उत्पन्न होती है। मैं यह नहीं समझ सकता कि वास्तव में समस्या क्या है और क्यों मैं अपने एडिन में दो सरल पूर्णांक पास नहीं कर सकता। यकीन है कि मैं कुछ गलत तरीके से कर रहा हूं। कृपया मेरा मार्ग दर्शन कीजिए।

+0

* ... बोल्ड उस कोड का चयन करता है जहां त्रुटि उत्पन्न होती है * त्रुटि कहां है? मुझे बोल्ड चयन नहीं दिख रहा है। – SliverNinja

+2

नियंत्रक अनुप्रयोग के खुले फ़ंक्शन में निम्नलिखित पंक्तियां utils = (IAddInUtilities) addin में त्रुटि उत्पन्न होती है।वस्तु; utils.setAddinTime (0, 8); – user1770669

+0

किस प्रकार की वस्तु 'addin.Object' है? COM इंस्टेंस पर प्रतिबिंबित करने के लिए 'IDISpatch' इंटरफ़ेस का उपयोग करके [' GetCOMObjectType' का उपयोग करने का प्रयास करें] (http://stackoverflow.com/a/10883851/175679)। क्या आप यह देखने के लिए ब्रेकपॉइंट सेट कर सकते हैं कि 'RequestComAddInAutomationService' कभी हिट हो गया है या नहीं? – SliverNinja

उत्तर

0

मुझे लगता है कि आपको RequestCOMAddInAutomationService को ओवरराइड करने की आवश्यकता है क्योंकि आप VSTO का उपयोग कर रहे हैं।

इस लेख देखें: How to call the Add-In functions from an external application?

साझा ऐड-में बाहरी आवेदन करने के लिए अपने कार्यों बेनकाब करने के लिए COMAddIn.Object तरीके का उपयोग करता है, तो OnConnection के बारे में हमारी कार्यान्वयन मोटे तौर पर इस तरह दिखेगा:

((COMAddIn) AddInInst)। ऑब्जेक्ट = नया MyAutomationObject();

हालांकि इस विधि VSTO में नहीं किया जा सकता क्योंकि स्थापित करने COMAddIn.Object केवल OnConnection समारोह के दौरान की अनुमति दी है और OnConnection VSTO परियोजना में दिखाई नहीं देता है।

यह RequestCOMAddInAutomationService()

आशा है कि मदद करता है अधिभावी का एक उदाहरण देता है!

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