Sdílet prostřednictvím


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:

  1. Definujte třídu, kterou chcete zpřístupnit další řešení.

  2. Přepsat RequestComAddInAutomationService metoda ThisAddIn třídy.Vrátí instanci třídy, který chcete vystavit další řešení.

Bb608621.collapse_all(cs-cz,VS.110).gifDefinová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:

  1. 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.

  2. Použije ComVisibleAttribute atribut tohoto rozhraní a nastavit tento atribut true.

  3. Upravte vaše třída implementovat toto rozhraní.

  4. Použije ClassInterfaceAttribute atribut třídy a nastavit tento atribut None hodnotu ClassInterfaceType výčtu.

  5. 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";
        }
    }
}

Bb608621.collapse_all(cs-cz,VS.110).gif 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.

Bb608621.collapse_all(cs-cz,VS.110).gifTří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.

Bb608621.collapse_all(cs-cz,VS.110).gifPř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:

  1. 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.

  2. Přístup Object vlastnost COMAddIn objektu.Tato vlastnost vrací objekt vystavených z v.

  3. 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.

Bb608621.collapse_all(cs-cz,VS.110).gifPří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

Bb608621.collapse_all(cs-cz,VS.110).gifPří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í

Další zdroje

Doplňky aplikace úroveň programování

Vývoj řešení sady Office