Hallo Community,
ich habe eine COM-Bibliothek die Methoden besitzt, deren Argumente ByRef definiert sind, z.B. Method GetVersion(ByRef majorVersion As Long) As WString. Die Methoden dieser COM-Bibliothek lassen sich nicht mit der Standardvorgehensweise ansprechen, so dass ich den Weg über InvokeMember/InvokeMethod gehen muss.
#-Begin------------------------------------------------ $Lib = $null try{ $Lib = New-Object -ComObject COMLIB } catch{ $rc = [System.Windows.Forms.MessageBox]::Show( "Can't create object COMLib", "Important hint", 0) } if ($Lib -ne $null) { [int]$Major = 0 [Object[]]$Argument = $Major [System.Reflection.ParameterModifier[]]$Modifier $Modifier += $Major.GetType().MakeByRefType() $Version = $Lib.GetType().InvokeMember("GetVersion", [System.Reflection.BindingFlags]::InvokeMethod, $null, $Lib, $Argument, $Modifier, $null, $null) $MsgBoxTxt = "MajorVersion: " + $Major $rc = [System.Windows.Forms.MessageBox]::Show($MsgBoxTxt, "", 0) $rc = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Lib) } Remove-Variable Lib #-End--------------------------------------------------
Wie ist via Invoke die richtige Vorgehensweise um ByRef definierte out-Argumente an eine COM-Methode zu übergeben resp. einen Rückgabewert zu erhalten?
Mit meinem obigen Ansatz erhalte ich die folgende Fehlermeldung: Der Wert "type MakeByRefType()" vom Type "System.Management.Automation.PSMethod" kann nicht in den Typ "System.Reflection.ParameterModifier" konvertiert werden.
Vielen Dank für Antworten und Tipps.
Beste Grüße
Stefan