Quantcast
Channel: Windows PowerShell Forum
Viewing all articles
Browse latest Browse all 2314

Aufruf von COM-Methoden deren Argumente ByRef übergeben werden müssen

$
0
0

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


Viewing all articles
Browse latest Browse all 2314


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>