Es ist eine Art lange Geschichte, mit halsbrecherischem Tempo. COM verwendet ein hyperreines schnittstellenbasiertes Paradigma. Eine Client-Anwendung führt nur Aufrufe von Schnittstellenmembern durch, die "Co-Klasse", die die Schnittstelle implementiert, wird vollständig ausgeblendet. Alles, was offengelegt wird, ist die Leitlinie der Co-Klasse, die CLSID. Dies wird an die universelle Factory-Funktion CoCreateInstance() übergeben, die gewünschte Schnittstelle wird zurückgegeben. Diese Isolierung ist der Hauptgrund dafür, dass COM-Server in einer beliebigen Sprache geschrieben werden können. Keine der Implementierungsdetails ist sichtbar und kann daher niemals mit der von Ihnen verwendeten Sprache inkompatibel sein.
Das Arbeiten mit Schnittstellen war jedoch ein Problem mit frühen VB-Versionen, im Gegensatz zu VB.NET hatten sie keine Unterstützung für Schnittstellen. Also ihre Laufzeit-Unterstützung ausgetrickst und macht es aussehen wie Sie mit einer Klasse arbeiten. Benannt Application
in diesem Fall. Die Mitglieder dieser Klasse sind die Mitglieder der Standardschnittstelle, in diesem Fall _Application
. Alle Verbindungspunkte von der Standardquellschnittstelle werden als Ereignisse hinzugefügt.
Der führende Unterstrich in _Application
ist auch ein Trick, es sagt den Typbibliothekbrowsern, die Schnittstelle zu verstecken. Etwas, was der Objektbrowser in Visual Studio nicht tut, vielleicht ein Grund, warum Sie diese Frage stellen. Eine Sache, die die Trickserei nicht erreichen kann, ist der Umgang mit einer Co-Klasse, die mehrere Schnittstellen implementiert. Aber vom Typ-Designer bemerkt, stellte er sicher, der Co-Klasse nur eine Standardschnittstelle und eine Quellschnittstelle zu geben.
Ähnliche Trickserei war notwendig, um .NET-Programmierern die gleiche Art von API zu geben, so dass sie auch Application
verwenden und ihren Code leicht portieren lassen konnten. Dies geschieht durch den Typbibliothekimporter (Tlbimp), es synthetisiert eine zusätzliche Schnittstelle mit demselben Namen wie die Co-Klasse, alle ihre Mitglieder sind genau dieselben wie die Standardschnittstellen.
Dies ist eine Schnittstelle, die VB.NET und C# -Compiler ermöglichen es Ihnen, eine Instanz davon zu erstellen. Ganz im Gegensatz zu dem, was man mit einer normalen Schnittstelle machen kann. Der Importeur auch synthetisiert eine Klasse, der gleiche Name wie die Co-Klasse mit "Class" angehängt. Also ApplicationClass
hier. Es implementiert alle der Schnittstellen, die die Co Klasse implementiert. Sie haben keinen praktischen Nutzen dafür in VB.NET und Sie sollten es vermeiden, da die sehr wünschenswerte Funktion "Einbetten von Interop-Typen" die Einbettung nicht unterstützt. Möglicherweise möchten Sie es jedoch in einer Sprache wie F # oder einer Sprache verwenden, die auf .NET portiert wurde, aber keine Schnittstellen unterstützt.
Lange Geschichte kurz, _Application
ist die tatsächliche Schnittstelle, die aus der Typbibliothek kam. Aber Sie sollten die synthetisierten Application
, beste Übereinstimmung mit allen Code-Samples bevorzugen, die Sie jemals begegnen werden.
[Anwendung von _Application erbt] (https://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.application.aspx) mit dem zusätzlichen ApplicationEvents_11_Event –
@rory, du hast nur ein Endlosschleife! Ich klicke auf den Link, der mich zu meiner Frage bringt, also klicke ich auf deinen Link, der mich zu meiner Frage bringt. . . – John
@John - Google-Suche Indexierung ist schnell. Klicken Sie auf einen der anderen Links. –