Sdílet prostřednictvím


Volání kódu v doplňcích na úrovni aplikace z jiných řešení pro systém Office

Objekt můžete vystavit ve vaší v doplňku jiných řešení, včetně jiných řešení Microsoft Office.Toto je užitečné v případě, že doplněk poskytuje službu, která má být povoleno používat další řešení.Například pokud používáte doplněk pro aplikaci Microsoft Office Excel, který provádí výpočty finančních dat z webové služby, dalších řešení provádět tyto výpočty pomocí volání do doplňku aplikace Excel v době běhu.

Platí pro: Informace v tomto tématu se vztahují na projekty na úrovni aplikace v Microsoft Office 2013 a Microsoft Office 2010. Další informace najdete v tématu Dostupné funkce podle aplikací systému Office a typů projektu.

V tomto procesu existují dva hlavní kroky:

  • Do tohoto doplňku vystavit objekt, který má dalších řešení.

  • V jiném řešení přístup k objektu zveřejněn prostřednictvím svých doplněk a členy volání objektu.

Typy řešení, které lze volat kód v doplněk.

Nyní můžete vystavit na objekt v doplňku pro následující typy řešení:

  • Kód Visual Basic for Applications (VBA) v dokumentu, který je načten v procesu aplikace jako doplněk.

  • Vlastní nastavení úrovni dokumentů, které jsou načteny v procesu aplikace jako doplněk.

  • Ostatní doplňky vytvořené pomocí šablony projektu sady Office v sadě Visual Studio.

  • Doplňky modelu COM (to znamená, doplňků, které implementují IDTExtensibility2 rozhraní přímo).

  • Jakékoli řešení, které běží v jiném procesu než doplněk (také s názvem tyto typy řešení out-of-process klientů).Mezi ně patří aplikace, které můžete automatizovat aplikace Office, jako jsou Windows Forms nebo aplikace konzoly a doplňků, které jsou načteny v jiném procesu.

Zveřejňující objektů jiná řešení

Chcete-li zveřejnit objekt ve své v doplňku dalších řešení, proveďte následující kroky v tohoto doplňku:

  1. Definuje třídu, kterou chcete zveřejnit na dalších řešení.

  2. Přepsání RequestComAddInAutomationService metodu v ThisAddIn třídy.Vrátíte instanci třídy, kterou chcete zveřejnit na dalších řešení.

Definice třídy, kterou chcete zveřejnit na dalších řešení

Na co nejnižší úrovni, musí být veřejné třídy, kterou chcete zveřejnit, musí mít ComVisibleAttribute atribut nastaven na hodnotu true, a musí vystavit IDispatch rozhraní.

Doporučený způsob zveřejnění IDispatch rozhraní je provést následující kroky:

  1. Definujte rozhraní, které deklaruje členy, které chtějí zpřístupnit další řešení.Toto rozhraní můžete definovat v projektu doplňku.Můžete však definovat toto rozhraní v projektu knihovny tříd samostatné, pokud chcete zveřejnit třída, která má jiný VBA pro vytváření řešení, tak, aby řešení, které volají tohoto doplňku mohou odkazovat na rozhraní bez odkazující na váš projekt doplněk.

  2. Použít ComVisibleAttribute atribut pro toto rozhraní a nastavit tento atribut true.

  3. Upravte vaší třídy k implementaci tohoto rozhraní.

  4. Použít ClassInterfaceAttribute atribut ke třídě a nastavit tento atribut None hodnota ClassInterfaceType výčtu.

  5. Pokud chcete zveřejnit třídu klientům out-of-process, je rovněž třeba proveďte následující kroky:

    • Odvodíte třídu od StandardOleMarshalObject.Další informace naleznete v tématu zveřejňující třídy klientům Out-of-Process.

    • Nastavte zaregistrovat pro spolupráci s COM vlastností v projektu, kde můžete definovat rozhraní.To je nezbytné pouze v případě, že chcete povolit klientům používat early vazby k volání do doplňku.

Následující příklad kódu ukazuje AddInUtilities třídy s ImportData metodu, kterou lze volat jinými řešeními.Tento kód v souvislosti s větší návod naleznete v tématu Návod: Volání kódu v doplňku na úrovni aplikace z jazyka 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";
        }
    }
}

Zveřejňující třídy, které mají VBA

Po provedení kroků uvedených výše VBA pro vytváření kódu lze volat pouze metody, které deklarujete v rozhraní.Kód VBA nelze volat ostatní metody ve třídě, včetně metod, které vaše třída získává ze základní třídy, jako Object.

Případně můžete vystavit IDispatch rozhraní nastavením ClassInterfaceAttribute atribut AutoDispatch nebo AutoDual hodnota ClassInterfaceType výčtu.Pokud v takovém případě není třeba deklarovat metody v samostatné rozhraní.Však VBA kód může volat jakékoli veřejné, tak i nestatické metody ve třídě, včetně metod získané z základní třídy, jako je například Object.Kromě toho out-of-process klienty, kteří používají early vazby nelze volat vaší třídy.

Zveřejňující třídy klientům Out-of-Process

Pokud chcete zveřejnit třídy v tohoto doplňku klientům out-of-process, by měl být odvozen od třídy StandardOleMarshalObject zajistit, že out-of-process klienti mohou volat objekt zveřejněné doplněk.Jinak pokusí se získat instanci vaše zveřejněné objektu v klientovi out-of-process může selhat neočekávaně ukončena.

Toto je vzhledem k tomu, že všechna volání do objektového modelu aplikace systému Office musí být provedeny v hlavním vlákně uživatelského rozhraní, ale volání z klienta out-of-process do objektu budou doručeny na zřetězení libovolného vzdáleného volání Procedur (vzdálené volání procedur).Zařazování mechanismus COM v rozhraní .NET Framework nebude přepněte vlákna a místo toho se pokusí k zařazování volání do objektu k vláknu příchozí vzdálené volání Procedur namísto hlavní vlákno uživatelského rozhraní.Pokud váš objekt je instance třídy, která je odvozena od StandardOleMarshalObject, příchozí volání do objektu jsou automaticky zařazené do vlákna, kde byla vytvořena zveřejněné objekt, jehož bude hlavní vlákno uživatelského rozhraní aplikace hostitele.

Další informace o používání vláken v řešení pro systém Office, naleznete v části Podpora práce s vlákny v systému Office.

Přepsání metody RequestComAddInAutomationService

Následující příklad kódu ukazuje, jak lze přepsat RequestComAddInAutomationService v ThisAddIn třídy v doplněk.Tento příklad předpokládá, že jste definovali třídu s názvem AddInUtilities , kterou chcete zveřejnit na dalších řešení.Tento kód v souvislosti s větší návod naleznete v tématu Návod: Volání kódu v doplňku na úrovni aplikace z jazyka 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;
}

Když doplněk je načtena, Visual Studio Tools for Office runtime volání RequestComAddInAutomationService metody.Modul runtime přiřadí vráceného objektu, který chcete Object vlastnost COMAddIn objekt, který představuje doplněk.To COMAddIn objekt je k dispozici další řešení pro systém Office a řešení, které automatizují sady Office.

Přístup k objektům z dalších řešení

Volání zveřejněné objektu z vašeho doplňku, proveďte následující kroky v klientovi řešení:

  1. Získat COMAddIn objekt, který reprezentuje zveřejněné doplněk.Klienti mají přístup ke všem k dispozici doplňky pomocí Application.COMAddIns vlastnost v objektu modelu hostitele aplikace systému Office.

  2. Přístup Object vlastnost COMAddIn objektu.Tato vlastnost vrací objekt zveřejněné z doplňku.

  3. Zavolejte členy zveřejněné objektu.

Způsob, jakým použijete návratovou hodnotu COMAddIn.Object vlastnosti se liší pro klienty VBA pro vytváření a jiné VBA klienty.Pro klienty out-of-process je nezbytné, chcete-li předejít možný spor další kód.

Přístup k objektům z VBA pro vytváření řešení

Následující příklad kódu ukazuje, jak volat metodu, která je zveřejněna rozhraním doplňku pomocí VBA.Tato makra VBA volá metodu pod názvem ImportData který je definován v doplňku s názvem ExcelImportData.Tento kód v souvislosti s větší návod naleznete v tématu Návod: Volání kódu v doplňku na úrovni aplikace z jazyka 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 jiné VBA pro vytváření řešení

V jiných VBA pro vytváření řešení, musíte přetypovat COMAddIn.Object vlastnost hodnota implementuje rozhraní ji a potom můžete volat zveřejněné metody u objektu rozhraní.Následující příklad kódu ukazuje, jak zavolat ImportData metody z jiného doplňku, který byl vytvořen pomocí nástroje pro vývojáře 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();

V tomto příkladu, pokud se pokusíte k přetypování hodnota COMAddIn.Object vlastnost, která má AddInUtilities třídy nikoli jeho IAddInUtilities rozhraní, vyvolá výjimku kód InvalidCastException.

Viz také

Úkoly

Návod: Volání kódu v doplňku na úrovni aplikace z jazyka VBA

Postupy: Vytváření projektů pro systém Office v prostředí Visual Studio

Koncepty

Architektura doplňků na úrovni aplikace

Přizpůsobení funkcí uživatelského rozhraní pomocí rozšiřujících rozhraní

Další zdroje

Programování doplňků na úrovni aplikace

Vývoj řešení pro systém Office