Volací kód v úrovni aplikace doplňky z dalších řešení sady Office
Objekt můžete vystavit v doplněk do jiných řešení, včetně dalších řešení Microsoft Office.To je užitečné, pokud doplněk poskytuje služby, které chcete povolit použít jiné řešení.Například pokud máte doplněk aplikace Microsoft Office Excel provádí výpočty finančních dat z webové služby dalších řešení tyto výpočty provést pomocí volání doplněk aplikace Excel v době běhu.
Platí pro: Informace v tomto tématu se vztahují na projekty na úrovni aplikace v systému Microsoft Office 2013 a Microsoft Office 2010. Další informace naleznete v tématu Funkce aplikace Office a typ projektu.
V tomto procesu jsou dva hlavní kroky:
V doplňku vystavit objektu do jiné řešení.
V jiném řešení přístup k objektu vystavené váš doplněk a členy volání objektu.
Typy řešení, které můžete volat kód doplněk
Můžete vystavit objekt v doplňku následující typy řešení:
Kód Visual Basic for Applications (VBA) v dokumentu, který je načten ve stejném procesu jako doplněk aplikace.
Vlastní úroveň dokumentů, které jsou načteny ve stejném procesu jako doplněk aplikace.
Ostatní doplňky vytvořené pomocí šablony projektu v aplikaci Visual Studio.
Doplňky modelu COM (, doplňky, které IDTExtensibility2 přímo rozhraní).
Jakékoli řešení, které běží v jiném procesu než doplněk (tyto typy řešení jsou také pojmenovány Klienti mimo proces).Patří mezi aplikace, které automatizaci aplikace sady Office, například model Windows Forms nebo aplikace konzoly a doplňky, které jsou načteny v jiném procesu.
Vystavení objektů do jiných řešení
Vystavit objekt v doplněk jiných řešení, proveďte následující kroky v doplněk:
Definujte třídu, kterou chcete zpřístupnit další řešení.
Přepsat RequestComAddInAutomationService metoda ThisAddIn třídy.Vrátí instanci třídy, který chcete vystavit další řešení.
Definování třídy, které chcete vystavit další řešení
Minimálně musí být veřejné třídy chcete vystavit, musí mít ComVisibleAttribute atribut nastaven na true, a musí vystavit IDispatch rozhraní.
Doporučeným způsobem, jak vystavit IDispatch rozhraní je provést následující kroky:
Definujte rozhraní, který deklaruje členy, které chcete vystavit další řešení.Toto rozhraní lze definovat v projektu doplňku.Můžete však chtít definovat rozhraní v projektu knihovny samostatné třídy, pokud chcete vystavit třídy bez VBA řešení tak, aby řešení, které volají doplněk můžete odkazovat na rozhraní bez odkazu přidat do projektu.
Použije ComVisibleAttribute atribut tohoto rozhraní a nastavit tento atribut true.
Upravte vaše třída implementovat toto rozhraní.
Použije ClassInterfaceAttribute atribut třídy a nastavit tento atribut None hodnotu ClassInterfaceType výčtu.
Pokud chcete vystavit třídy klientům mimo proces, budete také muset proveďte následující:
Odvození třídy z StandardOleMarshalObject.Další informace naleznete v Vystavení třídy klientů mimo proces.
Nastavit Register for COM interop vlastností v projektu, kde můžete definovat rozhraní.To je nutné pouze v případě, že chcete povolit klientům pomocí časná vazba volání do doplňku.Další informace naleznete v tématu Správa vlastností kompilace.
Následující příklad kódu ukazuje AddInUtilities třídy s ImportData metodu, která mohou být volány jiné řešení.Tento kód v kontextu větší návod najdete na Názorný postup: Volání kódu v doplňku úrovni aplikace VBA.
<ComVisible(True)> _
Public Interface IAddInUtilities
Sub ImportData()
End Interface
<ComVisible(True)> _
<ClassInterface(ClassInterfaceType.None)> _
Public Class AddInUtilities
Implements IAddInUtilities
' This method tries to write a string to cell A1 in the active worksheet.
Public Sub ImportData() Implements IAddInUtilities.ImportData
Dim activeWorksheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet
If activeWorksheet IsNot Nothing Then
Dim range1 As Excel.Range = activeWorksheet.Range("A1")
range1.Value2 = "This is my data"
End If
End Sub
End Class
[ComVisible(true)]
public interface IAddInUtilities
{
void ImportData();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class AddInUtilities : IAddInUtilities
{
// This method tries to write a string to cell A1 in the active worksheet.
public void ImportData()
{
Excel.Worksheet activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet;
if (activeWorksheet != null)
{
Excel.Range range1 = activeWorksheet.get_Range("A1", System.Type.Missing);
range1.Value2 = "This is my data";
}
}
}
Vystavení tříd jazyka VBA
Po provedení kroků uvedených výše v VBA kód může volat pouze metody, které můžete deklarovat rozhraní.Kód VBA nelze volat jiné metody ve vaší třídě, včetně metod, které vaše třída získává ze základní třídy jako Object.
Alternativně můžete vystavit IDispatch rozhraní nastavením ClassInterfaceAttribute atribut AutoDispatch nebo AutoDual hodnotu ClassInterfaceType výčtu.Pokud to uděláte, není nutné metody v samostatné rozhraní deklarovat.Nicméně kód VBA jakékoli veřejné a nestatické metody volat ve vaší třídě, včetně metod získané od základní třídy jako Object.Navíc mimo proces klienti používají časná vazba nelze volat vaší třídy.
Třídy klientům mimo proces vystavení
Pokud chcete zobrazit třídy v doplněk klientům mimo proces, měli byste odvodit třídu z StandardOleMarshalObject k zajištění, že out-of-process klienti mohou volat objekt vystavených doplněk.Pokusy o získání instance vystavených objekt mimo proces klienta, jinak může selhat neočekávaně.
Je to proto, že všechna volání do objektového modelu aplikace sady Office se musí provádět na hlavní podproces uživatelského rozhraní, ale volání z mimo proces klienta do objektu budou doručeny na libovolný zřetězení RPC (remote procedure call).Mechanismus zařazování COM v rozhraní.NET Framework nebude přepínání podprocesů a místo toho pokusí k zařazování volání do objektu na příchozí podprocesu RPC místo hlavní podproces uživatelského rozhraní.Pokud objekt je instancí třídy, která je odvozena z StandardOleMarshalObject, příchozí volání do objektu jsou automaticky zařazena do vlákno kde vystavených objekt byl vytvořen, což bude hlavní podproces uživatelského rozhraní aplikace hostitele.
Další informace o použití vláken v řešeních Office naleznete v Threading podpora v sadě Office.
Přepsání metody RequestComAddInAutomationService
Následující příklad kódu ukazuje, jak přepsat RequestComAddInAutomationService v ThisAddIn třída v doplňku.Tento příklad předpokládá, že jste definovali třídu s názvem AddInUtilities , které chcete vystavit další řešení.Tento kód v kontextu větší návod najdete na Názorný postup: Volání kódu v doplňku úrovni aplikace VBA.
Private utilities As AddInUtilities
Protected Overrides Function RequestComAddInAutomationService() As Object
If utilities Is Nothing Then
utilities = New AddInUtilities()
End If
Return utilities
End Function
private AddInUtilities utilities;
protected override object RequestComAddInAutomationService()
{
if (utilities == null)
utilities = new AddInUtilities();
return utilities;
}
Při načtení doplňku Visual Studio Tools for Office runtime volání RequestComAddInAutomationService metoda.Modul runtime přiřadí vráceného objektu Object vlastnost COMAddIn objekt, který představuje doplněk.Tato COMAddIn objekt je k dispozici další řešení Office a řešení, které automatizují Office.
Přístup k objektům z dalších řešení
V doplňku volání vystavených objektu, proveďte následující kroky řešení klienta:
Získat COMAddIn objekt, který představuje vystavených doplněk.Klienti všechny dostupné doplňky můžete přistupovat pomocí Application.COMAddIns vlastnost v objektovém modelu aplikace Office hostitele.
Přístup Object vlastnost COMAddIn objektu.Tato vlastnost vrací objekt vystavených z v.
Zavolejte členy exponované objektu.
Způsob použití vrácenou hodnotu COMAddIn.Object vlastnosti se liší pro VBA klienty a klienty jazyka VBA.Pro klienty mimo proces je nutné se vyhnout možné spor další kód.
Přístup k objektům z řešení VBA
Následující příklad kódu ukazuje, jak použít volání metody, který je vystaven pomocí doplňku VBA.Toto makro VBA volá metodu nazvanou ImportData který je definován v doplněk s názvem ExcelImportData.Tento kód v kontextu větší návod najdete na Názorný postup: Volání kódu v doplňku úrovni aplikace VBA.
Sub CallVSTOMethod()
Dim addIn As COMAddIn
Dim automationObject As Object
Set addIn = Application.COMAddIns("ExcelImportData")
Set automationObject = addIn.Object
automationObject.ImportData
End Sub
Přístup k objektům z řešení jazyka VBA
V řešení jazyka VBA, musíte přetypovat COMAddIn.Object vlastnost hodnotu implementuje rozhraní ji a potom můžete volat vystavených metod rozhraní objektu.Následující příklad kódu ukazuje způsob volání ImportData metoda z různých doplněk, který byl vytvořen pomocí nástroje pro vývojáře sady Office v sadě Visual Studio.
Dim addIn As Office.COMAddIn = Globals.ThisAddIn.Application.COMAddIns.Item("ExcelImportData")
Dim utilities As ExcelImportData.IAddInUtilities = TryCast( _
addIn.Object, ExcelImportData.IAddInUtilities)
utilities.ImportData()
object addInName = "ExcelImportData";
Office.COMAddIn addIn = Globals.ThisAddIn.Application.COMAddIns.Item(ref addInName);
ExcelImportData.IAddInUtilities utilities = (ExcelImportData.IAddInUtilities)addIn.Object;
utilities.ImportData();
Například pokud hodnota přetypována COMAddIn.Object vlastnost AddInUtilities třídy spíše než IAddInUtilities rozhraní, vyvolá kód InvalidCastException.
Viz také
Úkoly
Názorný postup: Volání kódu v doplňku úrovni aplikace VBA
Jak: vytvoření Office projekty v aplikaci Visual Studio
Koncepty
Architektura doplňků úroveň aplikace
Úprava funkce uživatelského rozhraní pomocí rozšíření rozhraní