COM Control
für Office erstellen
Diese Beschreibung zeigt, wie
man ein COM Control erstellt und anschliessend in Microsoft Office verwendet.
Dabei wird das COM Control in
C# in Visual Studio erstellt. Die Beschreibung enthält den Basis-Code in C# zum
Erstellen eines COM Controls.
Das COM Control wird in diesem
Beispiel nur als .dll Datei erstellt und kommt ohne sichtbares Bediener-Control
aus.
Betrifft:
Erstellung in Android Studio C# oder vb.net als Application type: Class Library
Anwendung in:
Microsoft Word, Excel, Access, Powerpoint
.Dll .tlb COM ActiveX
1) ein neues Project erstellen
In Visual Studio auf File->New->Project
Dann im Dialog: New Project
auswählen :
Installed->Windows Desktop->Class Library (.NET Framework) in Visual
C# oder Vb.net
Das Projekt heißt im
Beispiel: Pdf_Text_Reader
Nach Erstellung der Class
Library (.NET Framework)
Start Code C# unter Class1.cs
Von Visual Studio automatisch
erstellt
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Pdf_Text_Reader
{
public class Class1
{
}
}
|
Grundeinstellugn für COM-Projekte
Für COM Projekte muss man im
Project->Properties einige COM-Optionen aktivieren:
Application
Dann auf Assembly Information->Make assembly COM-Visible
Build
Unter Project->Build:->Register for COM Interop aktivieren
Signing
Unter Project->Signing->Sign the assembly
Auf Chosse as strong name key file: <New..>
auswählen
Dann einen neuen Schlüssel eingeben
Unter Key File name: einen
neuen Namen frei definierbar eingeben
C#: COM Code
1) unter Using InteropServices
using System.Runtime.InteropServices;
|
2) im Ersten Block definiert
man die in Ms Office sichtbaren zugriffe wie COM.Functions(..) (Methoden in c#).
Dabei kopiert man einfach namentlich
die internen Methoden aus der COM-Class
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("your-GUID-1")]
public interface _Visible_Methods
{
//--------< _Visible_Methods >--------
//*visible COM Methods of this Control under Office,Excel, Word
//*simply repeat method from class
string get_Hello();
//--------</ _Visible_Methods >--------
}
|
Dann gibt man der COM Classe die
Attribute ClassInterface, eine GUID und eine ProgID
[ClassInterface(ClassInterfaceType.None)]
[Guid("your-GUID-2")]
[ProgId("Pdf_Text_Reader")]
public class pdf_Reader : _Visible_Methods
{
..
}
|
C# Code-Snippet
Für COM Control
C# Code-Vorlage für COM Control dll in Ms Office (Excel, Word,
Powerpoint..)
using System;
using System.Runtime.InteropServices;
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("your-GUID1")]
public interface _Visible_Methods
{
//--------< _Visible_Methods >--------
//*visible COM Methods of this Control under Office,Excel, Word
//*simply repeat method from class
string get_Hello();
//--------</ _Visible_Methods >--------
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("your-GUID2")]
[ProgId("Pdf_Text_Reader")]
public class pdf_Reader : _Visible_Methods
{
//----------------< class: pdf_Reader >----------------
//*internal method
public string get_Hello()
{
//--------< get_Hello() >--------
return "Hello, this Text is from the C# COM.dll. Code at under CodeDocu.com";
//--------</ get_Hello() >--------
}
//----------------</ class: pdf_Reader >----------------
}
|
Ausgabe-Dateien von Visual Studio
Runtime-Dateien
Man benötigt für das COM
Control Objekt die Dateien im /bin/Debug oder /bin/Release verzeichnis.
Dabei wird die .tlb Datei
erst beim zweiten Aufruf von Menü->Build ->Build
Solution erzeugt.
Alle 3 Dateien (COM.dll,.pdb,
.tlb) müssen in das Verteiler-Verzeichnis kopiert werden, welche man für Office
letztendlich verwendet.
Zum Testen oder zur
Weitergabe kann man die Dateien vom Projekt-Ordern ein Weitergabe-Verzeichnis
kopieren.
Registrieren und Deinstallieren
Bevor man die COM dateien in Ms
Office verwenden kann, muss man die COM_File.tlb Datei mit register.bat in
Windows 7 und Windows 10 anmelden.
Man muss die register.bat als
Administrator aufrufen.
In der Register.bat steht der
Aufruf von regasm.exe "full_path_your_COM_project.dll" mit /tlb und
/codebase als Parametern.
Register.bat Code
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe
"C:\_Daten\Desktop\VS_Projects\ActiveX\Pdf_Text_Reader\_Test\Pdf_Text_Reader.dll"
/tlb /codebase
Pause
|
Unregister.bat
Man benötigt die Unregister.bat,
wenn man das COM Control vom Windows Rechner entfernen will.
Hier ist darauf zu achten,
dass regasm.exe mit /u ausgeführt wird und auf die xxx_your_com.dll Datei
verweist.
Unregister.bat code
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe
/u
"C:\_Daten\Desktop\VS_Projects\ActiveX\Pdf_Text_Reader\_Test\Pdf_Text_Reader.dll"
pause
|
Anwendung in Excel
Unter Microsoft MS Excel bindet
man diese COM Datei in der vba Codebehind Seite ein.
Man kommt zu der vba Seit mit
Alt-F11.
Verweis erstellen:
Dann muss man unter
Menü->Extras->Verweise mit
Durchsuchen… auf die .tlb Datei des Projektes gehen.
Vba-Code
Anschliessend kann man das
COM Control wie folgt mit Intellisense einbinden.
Vba Code Beispiel
Option Explicit On
Public Sub Test()
Dim pdf_Reader As New Pdf_Text_Reader.pdf_Reader
Dim s As String
s = pdf_Reader.get_Hello
MsgBox s
End Sub
|
Ausführung in Excel
Dann die Ausführung unter Excel:
Der Dialog erscheint aus der
Rückgabe -Strings der COM-Dll
COM und ActiveX
Dies Beschreibung ist für eine
COM-Anwendung als .dll, welche unter Microsoft Office zum Aufrufen und ausführen
von Windows Programmen dient.
Dabei ist diese COM ohne
sichtbare User-Schnittstelle.
Der Aufbau eine ActiveX
Usercontol Anwendung ist ziemlich ähnlich.