Ich habe ein COM-Objekt mit Powershell erstellt:
%Vor% Dann muss ich die Schnittstelle "MyLib.MyInterface"
für dieses Objekt abfragen, aber ich habe keine Ahnung, wie man es mit PowerShell macht.
In der Reihenfolge Wort Angenommen, ich habe den folgenden C ++ Code
%Vor%Wie mache ich den gleichen Job mit Powershell
Irgendwelche Kommentare?
Danke
Hier ist ein Beispiel, wo ich Word anrufe (siehe Word-Objektmodell Übersicht ) COM-Objekt:
%Vor%Um Eigenschaften und Methoden Ihres COM-Objekts zu sehen, können Sie verwenden:
%Vor% Als Experiment habe ich $obj=new-object -com file
erstellt. ("Datei" ist der Progid für die FileMoniker COM-Klasse). [Runtime.InteropServices.marshal]::GetIUnknownForObject($obj)
gibt mir System.IntPtr
auf meinem Windows 2008R2-Rechner. Ich konnte diesen Wert zusammen mit der GUID für IMoniker an [Runtime.InteropServices.marshal] :: QueryInterface übergeben und habe denselben Wert (dh denselben Zeiger) wie ich von GetIUnknownForObject bekommen habe. So konnte ich die Schnittstelle abfragen.
Ich bin mir jedoch nicht sicher, was Powershell gut macht. Es gibt eine Menge anderer Methoden in [Runtime.InteropServices.marshal], die für den Umgang mit COM von PS von Interesse sein könnten. Aber im Allgemeinen ist der Umgang mit COM-Objekten in PS sehr anders als der Umgang mit ihnen in C ++.
BEARBEITEN Ich habe kürzlich einen Weg gefunden und verifiziert, wie man auf einige COM-Komponenten von PS zugreifen kann, die hier von Interesse sein könnten. Das Windows SDK wird mit einer großen Menge von IDL-Dateien geliefert. Wenn Sie auf eine dieser Komponenten zugreifen möchten (und die Komponente IDispatch nicht implementiert), können Sie die IDL mit MIDL kompilieren und anschließend mit TLBIMP eine Interop-Assembly erstellen. Ich habe das erfolgreich mit den 3 VSS Hardware Provider Schnittstellen gemacht.
Ich habe auch gelernt, dass Sie [type] :: GetTypeFromCLSID verwenden können, um einen Typ von einer CLSID zu erhalten. Und abhängig von der Komponente können Sie es dann instanziieren.
Tags und Links powershell com queryinterface