Wie funktioniert die Powershell-Schnittstelle für ein COM-Objekt?

8

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

    
Shuping 07.12.2011, 02:59
quelle

3 Antworten

2

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%     
JPBlanc 07.12.2011 04:38
quelle
2

Wenn ich Ihre Bedürfnisse verstanden habe, versuchen Sie Folgendes:

%Vor%

Hoffnung kann ein Ausgangspunkt sein

    
CB. 07.12.2011 08:27
quelle
2

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.

    
Χpẘ 24.09.2015 20:47
quelle

Tags und Links