Hier ist ein Beispiel
using System;
using System.Runtime.InteropServices;
namespace MyNamespace
{
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[Guid("E0F805D1-77CC-4C14-930E-5D65A1A39A2F")]
public interface IMyComInterface
{
void SayHello(string name);
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("1C9D8F2B-8D52-45A7-9E3D-ED6F2CE010E0")]
public class MyComClass : IMyComInterface
{
public void SayHello(string name)
{
Console.WriteLine($"Hello, {name}!");
}
}
}
In Visual Studio musst du in den Projekteinstellungen in den Build Optionen die Option "Für Interop registrieren" aktivieren. Wenn du das Projekt erstellt hast registrierst du die DLL mit dem Programm regasm für Interop.
regasm /codebase /tlb MyLibrary.dll
In Powershell kannst du die Klasse dann so verwenden wie das COM Interface von Excel.
$comObject = New-Object -ComObject "MyNamespace.MyComClass"
$comObject.SayHello("World")