{"id":55000225,"date":"2004-08-01T00:00:00","date_gmt":"2020-05-06T15:17:47","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=225"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"NETKlassen_in_Access_verwenden","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/","title":{"rendered":".NET-Klassen in Access verwenden"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg03.met.vgwort.de\/na\/9a21434e8b6849a0bf212f4476f60429\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Manfred Hoffbauer, D&uuml;sseldorf<\/b><\/p>\n<p><b>Das Microsoft.NET Framework h&auml;lt mit &uuml;ber 4.000 wesentlich mehr Klassen bereit als Microsoft Access. Darunter befinden sich auch zahlreiche Klassen, bei denen dem Access-Entwickler das Wasser im Munde zusammenl&auml;uft. Der folgende Beitrag beschreibt ein paar Tricks, mit denen Sie eine .NET-Klasse als COM-Komponente kompilieren und mit Access benutzen k&ouml;nnen.<\/b><\/p>\n<p>Ein mit Microsoft .NET erstelltes Programm kann prinzipiell nur innerhalb des .NET-Frameworks ausgef&uuml;hrt werden. Demzufolge k&ouml;nnen Sie auch die mit .NET programmierten COM-Komponenten auf PCs ausf&uuml;hren, auf denen das .NET-Framwork installiert ist. Au&szlig;erdem ben&ouml;tigen Sie einige Hilfsprogramme, die im Microsoft Visual Studio.NET und im Microsoft NET-Framework SDK enthalten sind. Als Programmeditor setzen wir SharpDevelop ein. Alle ben&ouml;tigten Komponenten k&ouml;nnen Sie kostenlos aus dem Internet laden und installieren.<\/p>\n<h3>Hinweis<\/h3>\n<p>Eine Anleitung zur Installation und zur Anwendung der .NET-Entwicklungsumgebung SharpDevelop finden Sie im Beitrag .NET-Programmierung mit SharpDevelop in der vorliegenden Ausgabe von Access im Unternehmen. <\/p>\n<h2>Vom Quellcode zum COM-Server<\/h2>\n<p>Das Component Object Model ist als weitgehend standardisierte Beschreibung f&uuml;r die Kommunikation zwischen Anwendungen unter Windows recht weit verbreitet.<\/p>\n<p>Viele Windows-Programme k&ouml;nnen COM-Komponenten unabh&auml;ngig davon benutzen, mit welcher Programmiersprache sie erstellt wurden. Beispiele sind Microsoft Access, Microsoft C++, Microsoft Excel und Microsoft Visual Basic. Wenn eine Anwendung eine COM-Komponente benutzt, fungiert die Anwendung als COM-Client und die Komponente als COM-Server.<\/p>\n<p>Bei der Verwendung eines .NET-Programms mit Microsoft Access ist die .NET-Komponente der COM-Server und die Microsoft Access-Anwendung der COM-Client. Dieser Weg ist f&uuml;r Sie als Access-Programmierer zun&auml;chst der nahe liegende. Dank der COM-Schnittstelle k&ouml;nnen Sie Ihre Hauptanwendung weiterhin mit Microsoft Access entwickeln und .NET-Programmcode nur sporadisch per COM einflie&szlig;en lassen.<\/p>\n<p>Wenn Sie sp&auml;ter haupts&auml;chlich mit .NET entwickeln sollten, dann wird Sie vielleicht schon jetzt beruhigen, dass der umgekehrte Weg ebenfalls m&ouml;glich ist: Ein .NET-Programm kann bestehende COM-Komponenten als so genannten unsicheren Code verwenden. Diese Verfahrensweise ben&ouml;tigen Sie, um mit .NET auf Microsoft Excel und Microsoft Word zuzugreifen.<\/p>\n<p>Ein erstes Testprogramm soll zun&auml;chst die verschiedenen Schritte vom Quellcode zum COM-Server aufzeigen. Um wirklich nur die erforderlichen Schritte zu zeigen und etwaige Programmierfehler weitgehend auszuschlie&szlig;en, soll das Programm selbst m&ouml;glichst einfach gehalten werden. Sp&auml;ter erh&auml;lt die Komponente weitere Klassen aus dem .NET-Framework. Dabei erhalten Sie unter anderem eine Klasse, mit der sich Zeichenketten ver- und entschl&uuml;sseln lassen.<\/p>\n<p><IMG height=\"429\" src=\"..\/fileadmin\/_temp_\/{C5818781-172B-472A-864C-C965CB39CB4C}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Mit diesem Dialog legen Sie eine neue Klassenbibliothek an.<\/span><\/b><\/p>\n<h2>Programm eingeben<\/h2>\n<p>Zur Eingabe des ersten Testprogramms starten Sie den kostenlosen Programmeditor SharpDevelop. Gehen Sie dann wie folgt vor (siehe Bild 1):<\/p>\n<li>Klicken Sie auf den Button Neues Combine.<\/li>\n<li>Markieren Sie im Dialog Neues Projekt die Kategorie VBNET.<\/li>\n<li>Markieren Sie die Schablone Klassenbibliothek.<\/li>\n<li>Geben Sie DotNetServerApp als Namen ein.<\/li>\n<li>W&auml;hlen Sie einen einpr&auml;gsamen und kurzen Pfad wie zum Beispiel C:\\Daten\\DotNetServerApp f&uuml;r das Verzeichnis.<\/li>\n<li>Klicken Sie auf die Erstellen. (<\/li>\n<p>SharpDevelop legt eine neue Klassenbibliothek an und f&uuml;gt die leere Klasse NewClass hinzu. Aus Gr&uuml;nden der &uuml;bersichtlichkeit sollten Sie der Klasse einen sprechenden Namen geben. Klicken Sie den Eintrag NewClass.vb im Projekt-Explorer mit der rechten Maustaste an und w&auml;hlen Sie Umbenennen aus dem Kontextmen&uuml;. &auml;ndern Sie den Namen in DotNetTestClass.vb. Korrespondierend k&ouml;nnen Sie den Klassennamen im Quelltext ebenfalls anpassen. F&uuml;gen Sie au&szlig;erdem den folgenden Programmcode ein:<\/p>\n<pre>Public Class DotNetTestClass\r\n   Public Sub New()\r\n        MyBase.New()\r\n    End Sub\r\n    Public Function EineZeichenkette() _        As String\r\n        EineZeichenkette = _            \"http:\/\/www.trinidat.de\"\r\n    End Function\r\nEnd Class<\/pre>\n<p>Damit verf&uuml;gen Sie &uuml;ber eine Funktion namens EineZeichenkette(), die eine Zeichenkette als Parameter zur&uuml;ckgibt. Mit der F8-Taste k&ouml;nnen Sie das Combine erstellen und erhalten im Verzeichnis C:\\Daten\\DotNetServerApp\\DotNetServerApp\\bin\\Debug die Datei DotNetServerApp.dll. Diese Datei gilt es nun f&uuml;r eine Access-Anwendung verf&uuml;gbar zu machen.<\/p>\n<p>Nun k&ouml;nnte man auf die Idee kommen, die DLL &uuml;ber den Befehl Extras\/Verweise und Durchsuchen in Access hinzuzuf&uuml;gen. Dies f&uuml;hrt jedoch leider zu der Fehlermeldung, dass ein Verweis auf die angegebene Datei nicht hinzugef&uuml;gt werden kann (siehe Bild 2). Die n&auml;chsten Abschnitte dieses Beitrags beschreiben die Schritte, mit denen Sie aus der DLL-Datei einen COM-Server machen.<\/p>\n<h2>Von der DLL zum COM-Server<\/h2>\n<p>Eine wichtige Voraussetzung f&uuml;r einen COM-Server ist das Vorhandensein eines Konstruktors, der ohne Argumente auskommt. Durch die Eingabe der New()-Prozedur ist diese Voraussetzung bereits erf&uuml;llt. Die Angabe von MyBase.New() ruft den Konstruktor der Basisklasse auf, was f&uuml;r unser Beispiel v&ouml;llig ausreichend ist.<\/p>\n<pre>&lt;Comclass(VonDotNet.ClassId, VonDotNet.InterfaceId, VonDotNet.EventsId)&gt; _\r\nPublic Class DotNetTestClass<\/pre>\n<p><b>Quellcode 1<\/b><\/p>\n<pre>&lt;Microsoft.Visualbasic.Comclass(DotNetTestClass.ClassId, DotNetTestClass.InterfaceId, DotNetTestClass.EventsId)&gt; _\r\nPublic Class DotNetTestClass<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<pre>#Region \"COM GUIDs\"\r\n    Public Const ClassId As String =   \"ce8c8909-1126-4694-bfdd-602528cae505\"\r\n    Public Const InterfaceId As String = \"b937860c-6670-4f1e-8028-31e5adacb18d\"\r\n    Public Const EventsId As String = \"ccd5da17-c538-4903-913e-3b7bcf6f7f71\"\r\n#End Region<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<p><IMG height=\"94\" src=\"..\/fileadmin\/_temp_\/{C5818781-172B-472A-864C-C965CB39CB4C}\/pic002.png\" width=\"371\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Diese Fehlermeldung erhalten Sie beim Versuch, die DLL als Com-Server einzubinden.<\/span><\/b><\/p>\n<p>Mit dem ComClass-Attribut kennzeichnen Sie die neue Klasse als COM-Server. Dies veranlasst den Compiler zu verschiedenen Aktionen, die f&uuml;r die Verwendung eines .NET-Programms als COM-Server erforderlich sind. Sie m&uuml;ssen das Attribut in spitzen Klammern vor Public Class DotNetTestClass setzen.<\/p>\n<p>Alternativ k&ouml;nnen Sie es auch eine Zeile dar&uuml;ber positionieren und die beiden Zeilen mit dem Unterstrich verbinden (s. Quellcode 1).<\/p>\n<p>Wenn Sie das Combine nun mit F8 erstellen, dann meldet .NET den Fehler, dass ComClass unbekannt sei. Der Grund hierf&uuml;r besteht darin, dass ComClass im Namespace Microsoft.VisualBasic definiert ist. Aus diesem Grund m&uuml;ssen Sie den Namespace entweder importieren oder vor ComClass mit angeben (s. Quellcode 2).<\/p>\n<p>Jede unter Windows registrierte COM-Komponente muss eindeutig &uuml;ber eine Guid identifizierbar sein. Aus diesem Grund m&uuml;ssen Sie mindestens die Guid f&uuml;r die ClassId im Quellcode angeben. Falls Ihr COM-Server Interfaces und Ereignisse verwendet, m&uuml;ssen Sie auch diese Guids angeben. Die Definition der Guids geschieht durch die Programmzeilen aus Quellcode 3.<\/p>\n<h2>Woher kommen die Guids<\/h2>\n<p>Es stellt sich nat&uuml;rlich die Frage, woher Sie g&uuml;ltige Guids bekommen k&ouml;nnen. Eine einfache M&ouml;glichkeit besteht darin, dass Sie mit SharpDevelop ein kleines Tool f&uuml;r diesen Zweck programmieren. Legen Sie dazu eine neue Combine mit dem Namen CreateGuid an. W&auml;hlen Sie VBNET als Kategorie und verwenden Sie die Schablone Windows-Anwendung.<\/p>\n<p>SharpDevelop f&uuml;gt Ihrer Combine automatisch das Formular MainForm.vb hinzu. Klicken Sie auf das Register Design, damit SharpDevelop die Entwurfsansicht des Formulars anzeigt(siehe Bild 3). Gehen Sie dann wie folgt vor:<\/p>\n<li>Blenden Sie mit Ansicht\/Tools die Toolbox ein.<\/li>\n<p><IMG height=\"343\" src=\"..\/fileadmin\/_temp_\/{C5818781-172B-472A-864C-C965CB39CB4C}\/pic003.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3:  In der Entwurfsansicht des Formulars k&ouml;nnen Sie Steuerelemente hinzuf&uuml;gen und deren Eigenschaften bearbeiten.<\/span><\/b><\/p>\n<li>Klicken Sie auf die Gruppe Windows Forms.<\/li>\n<li>Ziehen Sie ein Textbox-Steuerelement und ein Button-Steuerelement in die Entwurfsansicht des Formulars.<\/li>\n<li>Klicken Sie das Textbox-Steuerelement mit der rechten Maustaste an und w&auml;hlen Sie Eigenschaften aus dem Kontextmen&uuml;.<\/li>\n<li>&auml;ndern Sie die Eigenschaft Name auf txtGuid.<\/li>\n<li>Klicken Sie das Button-Steuerelement an.<\/li>\n<li>&auml;ndern Sie die Eigenschaft Name auf btnCreateGuid und die Eigenschaft Text auf &#038;Create Guid. (<\/li>\n<p>Mit einem Doppelklick auf den Button veranlassen Sie SharpDevelop, eine Ereignisprozedur f&uuml;r das Click-Ereignis des Buttons anzulegen und diese &uuml;ber AddHandler mit dem Click-Ereignis des Buttons zu verkn&uuml;pfen. Falls Sie sich den vom Formulardesigner generierten Programmcode ansehen wollen, dann brauchen Sie nur einen Doppelklick auf die Region Windows Forms Designer generated code auszuf&uuml;hren.<\/p>\n<p>Die Ereignisprozedur BtnCreateGuidClick ist ein echter Einzeiler. Mit der folgenden Anweisung veranlassen Sie .NET zur Anlage einer Guid. Diese Guid wird dem Steuerelement als Text zugewiesen:<\/p>\n<pre>me.txtGuid.text = \r\n    System.Guid.NewGuid.ToString<\/pre>\n<p><!--30percent--><\/p>\n<p>Durch das Bet&auml;tigen der F5-Taste veranlassen Sie das Kompilieren und den Start des Programms. .Net zeigt ein Formular mit einer Schaltfl&auml;che an. Bei jedem Klick auf die Schaltfl&auml;che wird eine neue Guid generiert (siehe Bild 4).<\/p>\n<p>Falls Sie das Programm h&auml;ufiger ben&ouml;tigen, brauchen Sie jeweils nur die Datei CreateGuid.exe per Doppelklick zu starten. Bei Bedarf k&ouml;nnen Sie auch eine Verkn&uuml;pfung zu dieser EXE-Datei auf dem Desktop ablegen.<\/p>\n<p><IMG height=\"208\" src=\"..\/fileadmin\/_temp_\/{C5818781-172B-472A-864C-C965CB39CB4C}\/pic004.png\" width=\"400\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4:  Mit diesem Formular erhalten Sie neue Guids.<\/span><\/b><\/p>\n<p>Das Programm ist nun so vollst&auml;ndig, dass Sie es mit F8 kompilieren k&ouml;nnen. Falls beim Kompilieren Fehler auftreten, zeigt SharpDevelop die Anzahl der Fehler an. Im unteren Teil des Fensters k&ouml;nnen Sie auf das Register Aufgaben klicken, um eine Liste der Fehler zu erhalten. Ein Doppelklick auf einen dieser Fehler markiert die entsprechende Stelle im Quellcode.<\/p>\n<p>Wenn das Kompilieren fehlerfrei funktioniert, erhalten Sie erwartungsgem&auml;&szlig; die Datei DotNetServerApp.dll. Leider l&auml;sst sich auch diese Datei mit Access nicht als Verweis hinzuf&uuml;gen. Bevor Sie den COM-Server wirklich benutzen k&ouml;nnen, m&uuml;ssen Sie ihn zuerst noch in Windows registrieren.<\/p>\n<h2>Einen starken Namen zuweisen<\/h2>\n<p>Eine DLL ist nur dann als COM-Server zu gebrauchen, wenn die Assembly einen starken Namen hat. In .NET ist eine Assembly eine abstrakte Zusammenfassung von Klassen und Projekten zu einer Einheit.<\/p>\n<p>Es handelt sich dabei um die kleinste als eigenst&auml;ndiges Programm ausf&uuml;hrbare Einheit. Ein einfaches Beispiel f&uuml;r eine minimale Assembly ist das weiter oben beschriebene Programm CreateGuid.exe.<\/p>\n<p>Eine besondere St&auml;rke von .NET ist das so genannte XCopy-Deployment. Das bedeutet sinngem&auml;&szlig;, dass Sie, um sie von dort aus zu starten, die Bestandteile einer Anwendung (DLL-, EXE- und Ressourcen-Dateien) einfach nur in ein Verzeichnis zu kopieren brauchen. Wenn Sie das Programm CreateGuid.exe in ein anderes Verzeichnis kopieren, dann k&ouml;nnen Sie es von dort aus starten. Ein zus&auml;tzliches Installationsprogramm ist nicht erforderlich.<\/p>\n<p>Dieses Verfahren ist in den meisten F&auml;llen einfach zu handhaben und sinnvoll. Nicht geeignet ist das Verfahren f&uuml;r Programmbestandteile, die von vielen Anwendungen gleichzeitig benutzt werden sollen. Diese verwaltet .NET im so genannten Global Assembly Cache (kurz: GAC). Ein .NET-Programm, das als COM-Server fungieren soll, muss ebenfalls im GAC registriert werden. Dies ist nun aber leider nur mit solchen Programmen m&ouml;glich, die &uuml;ber einen starken Namen (englisch: strong name) verf&uuml;gen. Es gibt mehrere Verfahren zur Vergabe starker Namen. Das Beispiel verwendet das AssemblyKeyFile-Attribut. Mit ihm k&ouml;nnen Sie den Namen einer Datei angeben, die ein Schl&uuml;sselpaar f&uuml;r die Registrierung der Assembly im GAC enth&auml;lt.<\/p>\n<p>Die Anlage dieser Datei erfolgt mit dem Programm SN.EXE, das sowohl im Lieferumfang von Microsoft Visual Studio .NET als auch im Lieferumfang des Microsoft .NET Framework SDK enthalten ist. Wenn Sie nicht wissen, an welcher Stelle Sie das Programm finden k&ouml;nnen, sollten Sie einfach mit dem Windows-Explorer im Unterverzeichnis Programme danach suchen. Auf einem PC mit installiertem Visual Studio.NET lautet der Aufruf zur Anlage des Schl&uuml;sselpaares wie folgt:<\/p>\n<pre>\"C:\\Programme\\Microsoft Visual Studio .NET 2003\\SDK\\v1.1\\Bin\\sn.exe\" -k DotNetServerApp.snk\r\nPause<\/pre>\n<p>Sie finden die Batchdatei unter dem Namen SN.BAT in den Beispieldateien zu diesem Beitrag. Wenn Sie die Befehle direkt eingeben wollen, dann w&auml;hlen Sie den Befehl Ausf&uuml;hren aus dem Start-Men&uuml; von Windows und geben Sie Command als Befehl ein.<\/p>\n<p>Ja richtig, im Zeitalter von WLans und objektorientierter Programmierung geht&#8220;s wieder zur&uuml;ck zu den Wurzeln, also zum DOS-Prompt &#8211; Verzeihung: zum Windows-Befehlszeileninterpreter. Der beschriebene Aufruf von SN.EXE generiert die Datei DotNetServerApp.snk, die Sie als Schl&uuml;sseldatei in Ihre Combine einf&uuml;gen sollten (siehe Bild 5). Es bietet sich an, die Datei in das gleiche Verzeichnis zu kopieren, in dem sich der Quellcode der Anwendung befindet.<\/p>\n<p>Im Beispiel ist dies der folgende Ordner:<\/p>\n<p><IMG height=\"248\" src=\"..\/fileadmin\/_temp_\/{C5818781-172B-472A-864C-C965CB39CB4C}\/pic005.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5:  Der Aufruf des .NET Framework Strong Name Utilities erfolgt &uuml;ber den Windows-Befehlszeileninterpreter.<\/span><\/b><\/p>\n<p><IMG height=\"248\" src=\"..\/fileadmin\/_temp_\/{C5818781-172B-472A-864C-C965CB39CB4C}\/pic006.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6:  Mit diesen Schritten erzeugen Sie eine Typenbibliothek sowie installieren und registrieren die Assembly.<\/span><\/b><\/p>\n<p>C:\\Daten\\DotNetServerApp\\DotNetServerApp<\/p>\n<p>Anschlie&szlig;end sollten Sie im Projekt-Explorer von SharpDevelop das Projekt DotNetServerApp mit der rechten Maustaste anklicken und den Befehl Hinzuf&uuml;gen\/Dateien hinzuf&uuml;gen aus dem Kontextmen&uuml; ausw&auml;hlen. F&uuml;gen Sie die Datei  DotNetServerApp.snk Ihrem Projekt hinzu. Damit die Datei auch verwendet wird, m&uuml;ssen Sie im Projekt-Explorer doppelt auf AssemblyInfo.vb klicken.<\/p>\n<p>&auml;ndern Sie die standardm&auml;&szlig;ig eingef&uuml;gte Zeile f&uuml;r das AssemblyKeyFile-Attribut wie folgt:<\/p>\n<pre>&lt;assembly: \r\nAssemblyKeyFile(\"DotNetServerApp.snk\")&gt;<\/pre>\n<p>Abschlie&szlig;end sollten Sie die Combine durch Bet&auml;tigen der F8-Taste neu erstellen lassen.<\/p>\n<p><IMG height=\"346\" src=\"..\/fileadmin\/_temp_\/{C5818781-172B-472A-864C-C965CB39CB4C}\/pic007.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7:  Der Inhalt des Global Assembly Cache mit mehreren Versionen von DotNetServerApp<\/span><\/b><\/p>\n<h2>COM-Server im Global Assembly Cache registrieren<\/h2>\n<p>Die n&auml;chsten drei Schritte erfolgen komplett au&szlig;erhalb des Editors. Sie m&uuml;ssen eine Typenbibliothek anlegen, die Assembly im GAC installieren und sie unter Windows registrieren. Das Erzeugen der Typenbibliothek erfolgt mit dem Tool tlbexp, das Installieren der Assembly im GAC erfolgt mit gacutil und die Anmeldung unter Windows &uuml;bernimmt regasm (siehe Bild 6). Die Beispieldateien zu diesem Beitrag enthalten die Batchdatei libgen.bat, die diese Aufgaben f&uuml;r Sie durchf&uuml;hrt. Falls bei der Ausf&uuml;hrung der Batchdatei ein Fehler auftritt, sollten Sie die Pfade den Gegebenheiten Ihres PCs anpassen.<\/p>\n<p>Das Tool gacutil registriert die DLL bei jedem Aufruf mit einer neuen Versionsnummer im globalen Assemblycache. Das bedeutet, wenn Sie das Programm &auml;ndern und gacutil neu starten, haben Sie anschlie&szlig;end zwei Programmversionen im globalen Assemblycache. Einen &uuml;berblick &uuml;ber alle Programmversionen erhalten Sie mit dem Windows Explorer. &ouml;ffnen Sie einfach den Ordner C:\\WINDOWS\\assembly. Windows zeigt den Inhalt dieses Ordners wie in Bild 7 an.<\/p>\n<p>Bei Bedarf k&ouml;nnen Sie alte Programmversionen einfach mit der Entf-Taste l&ouml;schen. Aber Vorsicht: Sie sollten sich vorerst auf die verschiedenen Versionen von DotNetServerApp beschr&auml;nken. Wenn Sie andere Assemblies l&ouml;schen, kann Ihr PC stark durcheinander geraten.<\/p>\n<p>So, das war&#8220;s. Der Com-Server ist fertig programmiert, registriert und Sie k&ouml;nnen ihn verwenden. Gehen Sie dazu wie folgt vor:<\/p>\n<li>Starten Sie Microsoft Access mit einer leeren Datenbank.<\/li>\n<li>F&uuml;gen Sie ein neues, leeres Modul hinzu.<\/li>\n<li>W&auml;hlen Sie den Befehl Extras\/Verweise.<\/li>\n<pre>Option Compare Database\r\nOption Explicit\r\nPublic Sub MeinTest()\r\n    Dim x As New DotNetServerApp.DotNetTestClass\r\n    Debug.Print x.EineZeichenkette\r\nEnd Sub<\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<li>Klicken Sie auf die Schaltfl&auml;che Durchsuchen.<\/li>\n<li>F&uuml;gen Sie den Verweis auf die Datei DotNetServerApp.tlb hinzu (siehe Bild 8). (<\/li>\n<p><IMG height=\"292\" src=\"..\/fileadmin\/_temp_\/{C5818781-172B-472A-864C-C965CB39CB4C}\/pic008.png\" width=\"426\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8:  Mit diesem Dialog f&uuml;gen Sie einen Verweis auf den COM-Server hinzu.<\/span><\/b><\/p>\n<p>Wenn alles geklappt hat, dann k&ouml;nnen Sie die Datei ohne weitere Fehlermeldung &ouml;ffnen und den Verweisen hinzuf&uuml;gen. Im Verweis-Fenster sehen Sie anschlie&szlig;end die Datei DotNetServerApp. Um den COM-Server zu testen, k&ouml;nnen Sie in das Modulfenster VBA-Code aus Quellcode 4 eingeben.<\/p>\n<p>&ouml;ffnen Sie mit Strg + G das Direktfenster und geben Sie die Anweisung MeinTest ein. Unmittelbar nach dem Bet&auml;tigen der Eingabetaste &uuml;bergibt Access den Aufruf an den frisch gebackenen COM-Server und dieser liefert den Text www.trinidat.de zur&uuml;ck. Das Ergebnis sollte sofort im Direktfenster angezeigt werden.<\/p>\n<h2>Zeichenketten verschl&uuml;sseln<\/h2>\n<p>War das nicht auf den ersten Blick ziemlich viel Aufwand f&uuml;r eine einfache Print-Anweisung Bei der Beurteilung des Aufwands sollten Sie ber&uuml;cksichtigen, dass Sie mit dem beschriebenen Verfahren alle Objektklassen von .NET benutzen k&ouml;nnen. Wie einfach das ist, zeigt ein zweites Beispiel. Keine Angst, diesmal k&ouml;nnen Sie die bestehenden Batch-Dateien wieder verwenden und der Aufwand ist viel geringer. Gehen Sie wie folgt vor:<\/p>\n<li>Klicken Sie in SharpDevelop das Projekt DotNetServerApp mit der rechten Maustaste an.<\/li>\n<li>W&auml;hlen Sie Hinzuf&uuml;gen ( Neue Datei aus dem Kontextmen&uuml;.<\/li>\n<li>Markieren Sie die Kategorie VB und die Schablone Klasse.<\/li>\n<li>Geben Sie DotNetCryptoClass.vb als Dateinamen ein.<\/li>\n<li>Klicken Sie auf Erstellen. (<\/li>\n<p>SharpDevelop zeigt den standardm&auml;&szlig;ig generierten Rumpf der neuen Klasse an. Um diese Klasse innerhalb eines Com-Servers zu verwenden, m&uuml;ssen Sie das ComClass-Attribut mit drei neuen Guids hinzuf&uuml;gen. Die Guids k&ouml;nnen Sie mit dem selbst programmierten Tool CreateGuid generieren. Um den nachfolgend aufgef&uuml;hrten Programmcode verwenden zu k&ouml;nnen, m&uuml;ssen Sie zus&auml;tzlich zu dem Namespace System die Namespaces System.Security.Cryptography und System.Text importieren. In Quellcode 5 finden Sie das vollst&auml;ndige Listing der gesamten Klasse.<\/p>\n<p>Die DotNetCryptoClass-Klasse verwendet verschiedene in .NET integrierte Klassen zum ver- und entschl&uuml;sseln von Zeichenketten. Die verwendeten Klassen sind im Namespace mit der Bezeichnung System.Security.Cryptography enthalten.<\/p>\n<p>Beim Ver- und Entschl&uuml;sseln einer Zeichenkette m&uuml;ssen Sie jeweils den gleichen Key angeben. Den Key k&ouml;nnen Sie vom COM-Client &uuml;ber die Eigenschaft CryptKey definieren lassen.<\/p>\n<pre>Imports System\r\nImports System.Security.Cryptography\r\nImports System.Text\r\nNamespace DotNetServerApp\r\n&lt;Microsoft.VisualBasic.ComClass(DotNetCryptoClass.ClassId, DotNetCryptoClass.InterfaceId, DotNetCryptoClass.EventsId)&gt; _\r\nPublic Class DotNetCryptoClass\r\n#Region \"COM GUIDs\"\r\n    '' These  GUIDs provide the COM identity for this class \r\n    '' and its COM interfaces. If you change them, existing \r\n    '' clients will no longer be able to access the class.\r\n    Public Const ClassId As String = \"fb0b3833-2e08-4e33-b3b3-706520acb848\"\r\n    Public Const InterfaceId As String = \"7dd9a403-710a-4d50-a58b-bcc12ae2608b\"\r\n    Public Const EventsId As String = \"cd5e09d8-e7e5-4c27-8e4e-cda949bc6e5a\"\r\n#End Region\r\n    Private m_Key As String = \"\"\r\n    Private Des As New TripleDESCryptoServiceProvider\r\n    Private HashMD5 As New MD5CryptoServiceProvider\r\n    Public Sub New()\r\n MyBase.new()\r\n    End Sub\r\n    Public Property CryptKey() As String\r\n        Get\r\n            Return m_Key\r\n        End Get\r\n        Set(ByVal Value As String)\r\n            m_Key = Value\r\n        End Set\r\n    End Property\r\n    Public Function DeCrypt(ByVal SourceText As String) As String\r\n        Des.Key = HashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(m_Key))\r\n        Des.Mode = CipherMode.ECB\r\n        Dim desdencrypt As ICryptoTransform = Des.CreateDecryptor()\r\n        Dim buff() As Byte = Convert.FromBase64String(SourceText)\r\n        Return ASCIIEncoding.ASCII.GetString _\r\n        (desdencrypt.TransformFinalBlock(buff, 0, buff.Length))\r\n    End Function\r\n    Public Function Crypt(ByVal SourceText As String) As String\r\n        Des.Key = HashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(m_Key))\r\n        Des.Mode = CipherMode.ECB\r\n        Dim desdencrypt As ICryptoTransform = Des.CreateEncryptor()\r\n        Dim MyASCIIEncoding As New ASCIIEncoding\r\n        Dim buff() As Byte = ASCIIEncoding.ASCII.GetBytes(SourceText)\r\n        Return Convert.ToBase64String _\r\n        (desdencrypt.TransformFinalBlock(buff, 0, buff.Length))\r\n    End Function<\/pre>\n<p><b>Quellcode 5 (Start)<\/b><\/p>\n<h2>Testen der DotNetCryptoClass-Klasse<\/h2>\n<p>Um die DotNetCryptoClass-Klasse zu testen, m&uuml;ssen Sie die Combine neu erstellen lassen. Bet&auml;tigen Sie dazu die F8-Taste. Falls Kompilierfehler auftreten, sollten Sie zuerst die erforderlichen &auml;nderungen durchf&uuml;hren. Als Ergebnis erhalten Sie wie bisher eine einzelne Datei namens DotNetServerApp.dll in folgendem Verzeichnis:<\/p>\n<pre>    Public Shared Function GenerateHash(ByVal SourceText As String) As String\r\n        Dim Ue As New UnicodeEncoding\r\n        Dim ByteSourceText() As Byte = Ue.GetBytes(SourceText)\r\n        Dim Md5 As New MD5CryptoServiceProvider\r\n        Dim ByteHash() As Byte = Md5.ComputeHash(ByteSourceText)\r\n        Return Convert.ToBase64String(ByteHash)\r\n    End Function\r\nEnd Class\r\nEnd Namespace<\/pre>\n<p><b>Quellcode 5 (Fortsetzung)<\/b><\/p>\n<pre>Option Compare Database\r\nOption Explicit\r\nPublic Sub ComTest()\r\n    Dim x As New DotNetServerApp.DotNetTestClass\r\n    Debug.Print x.EineZeichenkette\r\n    Dim y As New DotNetServerApp.DotNetCryptoClass\r\n    y.CryptKey = \"www.trinidat.de\"\r\n    Dim strCrypt, strStart As String\r\n    strStart = \"DotNet als COM-Server.\"\r\n    strCrypt = y.Crypt(strStart)\r\n    Debug.Print \"1.) Durchlauf mit gleichen Key\"\r\n    Debug.Print \"Verwendeter Key:\", y.CryptKey\r\n    Debug.Print \"Urspr&uuml;ngliche Zeichenkette:\", strStart\r\n    Debug.Print \"Verschl&uuml;sselte Zeichenkette:\", strCrypt\r\n    Debug.Print \"Entschl&uuml;sselte Zeichenkette:\", y.DeCrypt(strCrypt)\r\n    Debug.Print \"2.) Entschl&uuml;sseln mit anderem Key\"\r\n    y.CryptKey = \"www.trinidat.de\"\r\n    Debug.Print \"&auml;nderung Key auf:\", y.CryptKey\r\n    Debug.Print \"Entschl&uuml;sselte Zeichenkette:\", y.DeCrypt(strCrypt)\r\nEnd Sub<\/pre>\n<p><b>Quellcode 6<\/b><\/p>\n<p>C:\\Daten\\DotNetServerApp\\DotNetServerApp\\bin\\Debug<\/p>\n<p>Bevor Sie die Datei registrieren und installieren k&ouml;nnen, m&uuml;ssen Sie zuerst eine eventuell gestartete Instanz von Microsoft Access beenden. Anderenfalls kann es vorkommen, dass der COM-Server gesperrt ist und nicht neu hinzugef&uuml;gt werden kann.<\/p>\n<p>Starten Sie danach die Batchdatei libgen.bat.<\/p>\n<p>Nach einem erneuten Start von Microsoft Access sollten Sie ins Modulfenster wechseln und den Men&uuml;befehl Extras\/Verweise ausw&auml;hlen. Leeren Sie das Ankreuzk&auml;stchen des Verweises DotNetServerApp und klicken Sie auf die Schaltfl&auml;che Durchsuchen. <\/p>\n<p>F&uuml;gen Sie die Datei DotNetServerApp.tlb neu hinzu. Stellen Sie durch den Vergleich von Dateidatum und -uhrzeit sicher, dass Sie die neueste Version der Datei hinzuf&uuml;gen. Den eigentlichen Test des erweiterten COM-Servers k&ouml;nnen Sie mit dem VBA-Code aus Quellcode 6 durchf&uuml;hren.<\/p>\n<p>Wenn Sie das Programm durch die Eingabe von ComTest in den Direktbereich starten, erhalten Sie folgende Ausgabe:<\/p>\n<pre>http:\/\/www.trinidat.de\r\nVerwendeter Key:            www.trinidat.de\r\nUrspr&uuml;ngliche Zeichenkette:              DotNet als COM-Server.\r\nVerschl&uuml;sselte Zeichenkette:              \/Kgtv0\/ebWjxZyhEkyLbB1OVMzNho7kl\r\nEntschl&uuml;sselte Zeichenkette:              DotNet als COM-Server.<\/pre>\n<p>Es ist wichtig, dass Sie beim Ver- und Entschl&uuml;sseln den gleichen Key verwenden. Andernfalls erhalten Sie eine Fehlermeldung.<\/p>\n<p>Durch den Einsatz von .NET als COM-Server erhalten Sie Zugriff auf mehr als 4.000 im .NET-Framework enthaltene Klassen.<\/p>\n<p>Selbst wenn Sie ber&uuml;cksichtigen, dass ein paar dieser Klassen in diesem Beitrag bereits vorgestellt wurden und weitere Klassen in gleicher oder &auml;hnlicher Form auch in VBA enthalten sind, bleibt immer noch ein reicher Fundus f&uuml;r die unterschiedlichsten Aufgaben.<\/p>\n<p>Es ist also nahe liegend, sich eine Klasse nach der anderen im Hinblick auf die Eignung f&uuml;r Microsoft Access anzusehen. Viele Klassen sind n&auml;mlich hervorragend dazu geeignet, die Schwachstellen von Access auszugleichen.<\/p>\n<p>.NET verf&uuml;gt &uuml;ber betriebssystemnahe Klassen wie FileSystemWatcher. Sie kann ein Programm &uuml;ber &auml;nderungen an Dateien unterrichten. Eine v&ouml;llig neue Denkweise f&uuml;r Access-Programmierer ist die Programmierung von Threads, die als solche innerhalb des Multithreading von Windows ablaufen. Ein Thread kann beispielsweise zu jeder vollst&auml;ndigen Stunde den Lagerbestand berechnen und Bestellungen per E-Mail versenden &#8211; eine Aufgabe, die mit Access nur auf Umwegen zu bew&auml;ltigen ist.<\/p>\n<p>Ein kleines Manko besteht vielleicht darin, dass COM-Server keine visuelle Darstellung bieten. Hierf&uuml;r ben&ouml;tigen Sie ActiveX-Steuerelemente. Tats&auml;chlich gibt es sogar einen Trick, mit dem sich in .NET programmierte Klassen als ActiveX-Steuerelement in Access einbetten lassen. Aber das ist das Thema eines anderen Beitrags.<\/p>\n<p>Wenn Sie die in diesem Beitrag beschriebenen Themen vertiefen wollen, dann sollten Sie sich folgende Internetseiten ansehen:<\/p>\n<h3>Walkthrough: Creating COM Objects with Visual Basic .NET<\/h3>\n<p>http:\/\/msdn.microsoft.com\/library\/default.aspurl=\/library\/en-us\/vbcn7\/html\/vawlkWalkthroughCreatingCOMObjectsWithVisualBasicNET.asp<\/p>\n<h3>How Do I&#8230;Build a .NET Server Callable from COM clients<\/h3>\n<p>http:\/\/samples.gotdotnet.com\/quickstart\/howto\/doc\/Interop\/Building_Samples_COM2NET.aspx<\/p>\n<h3>Handling Language Interoperability with the Microsoft .NET Framework<\/h3>\n<p>http:\/\/msdn.microsoft.com\/library\/en-us\/dndotnet\/html\/interopdotnet.aspframe=true<\/p>\n<h3>Packaging an Assembly for COM<\/h3>\n<p>http:\/\/msdn.microsoft.com\/library\/default.aspurl=\/library\/en-us\/cpguide\/html\/cpconexposingnetframeworkcomponentstocom.asp<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Microsoft.NET Framework h&auml;lt mit &uuml;ber 4.000 wesentlich mehr Klassen bereit als Microsoft Access. Darunter befinden sich auch zahlreiche Klassen, bei denen dem Access-Entwickler das Wasser im Munde zusammenl&auml;uft. Der folgende Beitrag beschreibt ein paar Tricks, mit denen Sie eine .NET-Klasse als COM-Komponente kompilieren und mit Access benutzen k&ouml;nnen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[44000017,662004,66042004],"tags":[],"class_list":["post-55000225","post","type-post","status-publish","format-standard","hentry","category-NET","category-662004","category-66042004"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>.NET-Klassen in Access verwenden - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\".NET-Klassen in Access verwenden\" \/>\n<meta property=\"og:description\" content=\"Das Microsoft.NET Framework h&auml;lt mit &uuml;ber 4.000 wesentlich mehr Klassen bereit als Microsoft Access. Darunter befinden sich auch zahlreiche Klassen, bei denen dem Access-Entwickler das Wasser im Munde zusammenl&auml;uft. Der folgende Beitrag beschreibt ein paar Tricks, mit denen Sie eine .NET-Klasse als COM-Komponente kompilieren und mit Access benutzen k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:17:47+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg03.met.vgwort.de\/na\/9a21434e8b6849a0bf212f4476f60429\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"19\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\".NET-Klassen in Access verwenden\",\"datePublished\":\"2020-05-06T15:17:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/\"},\"wordCount\":3271,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/9a21434e8b6849a0bf212f4476f60429\",\"articleSection\":[\".NET\",\"2004\",\"4\\\/2004\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/\",\"name\":\".NET-Klassen in Access verwenden - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/9a21434e8b6849a0bf212f4476f60429\",\"datePublished\":\"2020-05-06T15:17:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/9a21434e8b6849a0bf212f4476f60429\",\"contentUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/9a21434e8b6849a0bf212f4476f60429\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/NETKlassen_in_Access_verwenden\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\".NET-Klassen in Access verwenden\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":".NET-Klassen in Access verwenden - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/","og_locale":"de_DE","og_type":"article","og_title":".NET-Klassen in Access verwenden","og_description":"Das Microsoft.NET Framework h&auml;lt mit &uuml;ber 4.000 wesentlich mehr Klassen bereit als Microsoft Access. Darunter befinden sich auch zahlreiche Klassen, bei denen dem Access-Entwickler das Wasser im Munde zusammenl&auml;uft. Der folgende Beitrag beschreibt ein paar Tricks, mit denen Sie eine .NET-Klasse als COM-Komponente kompilieren und mit Access benutzen k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:17:47+00:00","og_image":[{"url":"http:\/\/vg03.met.vgwort.de\/na\/9a21434e8b6849a0bf212f4476f60429","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"19\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":".NET-Klassen in Access verwenden","datePublished":"2020-05-06T15:17:47+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/"},"wordCount":3271,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/#primaryimage"},"thumbnailUrl":"http:\/\/vg03.met.vgwort.de\/na\/9a21434e8b6849a0bf212f4476f60429","articleSection":[".NET","2004","4\/2004"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/","url":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/","name":".NET-Klassen in Access verwenden - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/#primaryimage"},"thumbnailUrl":"http:\/\/vg03.met.vgwort.de\/na\/9a21434e8b6849a0bf212f4476f60429","datePublished":"2020-05-06T15:17:47+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/#primaryimage","url":"http:\/\/vg03.met.vgwort.de\/na\/9a21434e8b6849a0bf212f4476f60429","contentUrl":"http:\/\/vg03.met.vgwort.de\/na\/9a21434e8b6849a0bf212f4476f60429"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/NETKlassen_in_Access_verwenden\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":".NET-Klassen in Access verwenden"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000225","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000225"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000225\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}