VSTO 2010ワードアドインを開発しようとしています。それはカウントダウンタイマー(ユーザーコントロール)を持つカスタム作業ウィンドウを持っています。アイデアは、ワード文書が開かれたときに合計時間(時と分)がアドインに渡され、アドインがそれをカウントダウンタイマーコントロールに渡すというものです。私はVS2010でアドインを実行し、Addin_Startupでユーザコントロールの2つの整数値、つまり時間と分を渡すと正常に動作します。整数をVSTO 2010ワードアドインに渡す
今、私はasp.netページからボタンをクリックして単語文書を開こうとしています。ボタンをクリックすると、単語のドキュメントが開き、時間が分かり、分がアドインに渡され、それがユーザコントロールに渡され、タイマーが所定の時間実行されます。
問題アドインに2つの整数を渡す方法と、それをどこに渡すかを理解できません。それは私を与え、時には「致命的なエラーエラー」やその他の時間を与える私のコードである「タイプのCOMオブジェクトをキャストすることができません 『システム.__ ComObject』タイプのインタフェースに 『MyWordAddin.IAddInUtilities』」に続き
の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)
{
}
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);
}
}
}
Word文書を開くと、アドイン
に2つの整数を送信しようとし
コントローラアプリケーション
私がコントローラアプリケーションを実行すると、スタートボタンのクリックイベントによって、「致命的なエラー」が表示されることがあります。「COMオブジェクトをタイプ 'System .__ ComObject'をインターフェイスタイプ 'MyWordAddin'にキャストすることができません。 IAddInUtilities '"と呼び、最後のコード行に"オブジェクトインスタンスが渡されず、オブジェクト化されていません "と表示されることがあります。エラーが発生したコードを大胆に選択しました。私は本当にここでの問題が何であるかを理解できません。なぜ、2つの単純な整数を私のaddinに渡すことができないのですか?私が間違ったやり方でやっていることは確かです。私を案内してください。
* ...太字でエラーが発生したコードを選択しました。*エラーはどこですか?私は大胆な選択肢が表示されません。 – SliverNinja
コントローラアプリケーションのオープン関数@次の行にエラーが発生します。 utils =(IAddInUtilities)addin。オブジェクト。 utils.setAddinTime(0、8); – user1770669
どのようなタイプのオブジェクトが 'addin.Object'ですか? 「IDispatch」インタフェースを使って['GetCOMObjectType'を使ってCOMインスタンスに反映させてください](http://stackoverflow.com/a/10883851/175679)。 'RequestComAddInAutomationService'にヒットしたかどうかを確認するためにブレークポイントを設定できますか? – SliverNinja