Aufgrund einer Nachfrage poste ich hier mal ein funktionierendes Beispiel.
Es nutzt nur die vix.dll und startet eine VM auf einem ESXi Server:
Spoiler anzeigen
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.6.1
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit];#include "VixH.au3"
#include <Array.au3>
Dim $vixdll
Dim $aRes1
Dim $aRes2
Dim $tHandle
Dim $hostHandle
Dim $vmHandle
Dim $jobHandle
Dim $err
Global Enum $VIX_PROPERTY_JOB_RESULT_HANDLE = 3010
Global Enum $VIX_PROPERTY_NONE = 0
Global Enum $VIX_INVALID_HANDLE = 0
Global Enum $VIX_VMPOWEROP_NORMAL = 0
Func ConsoleWriteArray (ByRef Const $array, $sArrayName = "")
Local $cnColumns
Local $cnDimension
Local $cnRows
Local $cnElements
If (not IsArray ($array)) Then
ConsoleWrite (StringFormat ("!--- ConsoleWriteArray - Fehler: %s ist kein Array!\n", $sArrayName))
Return 0
EndIf
$cnDimension = UBound ($array, 0)
If ($cnDimension > 3) Then
ConsoleWrite (StringFormat ("!--- ConsoleWriteArray - Fehler: %d\n", $sArrayName, $cnDimension))
ConsoleWrite (StringFormat ("!--- Max. Anzahl Dimensionen: %d\n", 3))
ConsoleWrite (StringFormat ("!--- %s - Anzahl Dimensionen: %d\n", $sArrayName, $cnDimension))
Return 0
EndIf
ConsoleWrite (StringFormat ("--- Arrayvariable %s\n--- Anzahl Dimensionen: %d\n", $sArrayName, $cnDimension))
$cnRows = UBound ($array, 1)
$cnColumns = UBound ($array, 2)
$cnElements = UBound ($array, 3)
Switch ($cnDimension)
Case 1
;...
ConsoleWrite (StringFormat ("--- Anzahl Elemente: %d\n", $cnRows))
For $i = 0 To $cnRows - 1
ConsoleWrite (StringFormat ("; %s [%d] = %s\n", $sArrayName, $i, $array[$i]))
Next
Case 2
;...
ConsoleWrite (StringFormat ("--- Anzahl Elemente: %d\n", $cnRows))
For $i = 0 To $cnRows - 1
For $j = 0 To $cnColumns - 1
ConsoleWrite (StringFormat ("; %s [%d][%d] = %s\n", $sArrayName, $i, $j, $array[$i][$j]))
Next
Next
Case 3
;...
ConsoleWrite (StringFormat ("--- Anzahl Elemente: %d\n", $cnRows))
For $i = 0 To $cnRows - 1
For $j = 0 To $cnColumns - 1
For $k = 0 To $cnElements - 1
ConsoleWrite (StringFormat ("; %s [%d][%d][%d] = %s\n", $sArrayName, $i, $j, $k, $array[$i][$j][$k]))
Next
Next
Next
Case Else
;...
EndSwitch
ConsoleWrite (StringFormat ("----------------------------\n\n", 0))
EndFunc
Func Vix_ReleaseHandle ($handle)
[/autoit] [autoit][/autoit] [autoit]Local $aRes = DllCall ($vixdll, "none", "Vix_ReleaseHandle", _
"int", $handle) ; VixHandle
Return $aRes[0]
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func VixVM_Open ($hostHandle, $vmxFilePathName, $callbackProc, $clientData)
[/autoit] [autoit][/autoit] [autoit]Local $aRes = DllCall ($vixdll, "INT:cdecl", "VixVM_Open", _
"INT", $hostHandle, _
"str", $vmxFilePathName, _
"PTR", $callbackProc, _
"PTR", $clientData)
Return $aRes[0]
EndFunc
Func VixVM_PowerOn ($vmHandle, $powerOnOptions, $propertyListHandle, $callbackProc, $clientData)
[/autoit] [autoit][/autoit] [autoit]Local $aRes = DllCall ($vixdll, "INT:cdecl", "VixVM_PowerOn", _
"INT", $vmHandle, _
"INT", $powerOnOptions, _
"INT", $propertyListHandle, _
"PTR", $callbackProc, _
"PTR", $clientData)
Return $aRes[0]
EndFunc
Func VixJob_Wait ($jobHandle, $v1, $v2 = 0 , $v3 = 0 , $v4 = 0 , $v5 = 0 , $v6 = 0 , $v7 = 0 , $v8 = 0 , $v9 = 0 , $v10 = 0 , $v11 = 0)
ConsoleWrite("NumParams:" & @NumParams & @CRLF)
;If Mod(@NumParams , 2) Then Return SetError(1,0,0)
;If Eval("v" & (@NumParams-1)) <> 0 Then Return SetError(2,0,0)
Local $aRes
Switch @NumParams
Case 2
ConsoleWrite("Case 2")
$aRes = DllCall ($vixdll, "UINT64:cdecl", "VixJob_Wait", "int", $jobHandle, "int", $v1)
Case 4
$aRes = DllCall ($vixdll, "UINT64:cdecl", "VixJob_Wait", "int", $jobHandle, "int", $v1, "ptr", $v2, "int", $v3)
Case 6
$aRes = DllCall ($vixdll, "UINT64:cdecl", "VixJob_Wait", "int", $jobHandle, "int", $v1, "ptr", $v2, "int", $v3, "ptr", $v4, "int", $v5)
Case 8
$aRes = DllCall ($vixdll, "UINT64:cdecl", "VixJob_Wait", "int", $jobHandle, "int", $v1, "ptr", $v2, "int", $v3, "ptr", $v4, "int", $v5, "ptr", $v6, "int", $v7)
Case 10
$aRes = DllCall ($vixdll, "UINT64:cdecl", "VixJob_Wait", "int", $jobHandle, "int", $v1, "ptr", $v2, "int", $v3, "ptr", $v4, "int", $v5, "ptr", $v6, "int", $v7, "ptr", $v8, "int", $v9)
Case 12
$aRes = DllCall ($vixdll, "UINT64:cdecl", "VixJob_Wait", "int", $jobHandle, "int", $v1, "ptr", $v2, "int", $v3, "ptr", $v4, "int", $v5, "ptr", $v6, "int", $v7, "ptr", $v8, "int", $v9, "ptr", $v10, "int", $v11)
EndSwitch
If @error Then Return SetError(3, @error, 0)
Return $aRes[0]
EndFunc
;#####################################################################################################################################################################################
;#####################################################################################################################################################################################
;#####################################################################################################################################################################################
;#####################################################################################################################################################################################
;#####################################################################################################################################################################################
;Global $MyhostHandle = $VIX_INVALID_HANDLE
;Dim $MyjobHandle = $VIX_INVALID_HANDLE
;Dim $MyERR
;$vixdll = DllOpen ("vix.dll")
;If @error Then
; ConsoleWrite('Fehler beim Öffnen der DLL' & @CRLF)
; Exit
;EndIf
;ConsoleWrite ('"' & $vixdll & '"' & @CRLF)
$vixdll = DllOpen("vix.dll")
ConsoleWrite ($vixdll & "---" & @error & @CRLF)
;$aRes = DllCall ($vixdll, "INT", "VixHost_Connect", "INT", -1, "INT", 10, "str", "https://192.168.28.128/sdk", "INT", 443, "str", "root", "str", "test1234", "INT", 0, "INT", 0, "PTR", 0, "PTR", 0)
$aRes1 = DllCall ($vixdll, "INT:cdecl", "VixHost_Connect", "INT", -1, "INT", 10, "str", "https://192.168.28.128/sdk", "INT", 443, "str", "root", "str", "test1234", "INT", 0, "INT", 0, "PTR", 0, "PTR", 0)
ConsoleWrite("---" & @error & @CRLF)
ConsoleWriteArray($aRes1)
$tHandle = DllStructCreate("int")
$err = VixJob_Wait ($aRes1[0], $VIX_PROPERTY_JOB_RESULT_HANDLE, DllStructGetPtr($tHandle), $VIX_PROPERTY_NONE)
$hostHandle = DllStructGetData($tHandle, 1)
ConsoleWrite("---" & @error & "----" & $hostHandle & @CRLF)
ConsoleWrite("$err =" & $err & @CRLF)
;ConsoleWriteArray($hostHandle)
$aRes1 = 0
$tHandle = 0
$jobHandle = 0
$jobHandle = VixVM_Open ($hostHandle, "[ha-datacenter/datastore1] Nostalgia/Nostalgia.vmx", 0, 0)
$tHandle = DllStructCreate("int")
$err = VixJob_Wait ($jobHandle, $VIX_PROPERTY_JOB_RESULT_HANDLE, DllStructGetPtr($tHandle), $VIX_PROPERTY_NONE)
$vmHandle = DllStructGetData($tHandle, 1)
ConsoleWrite("---" & @error & "----" & $vmHandle & @CRLF)
$tHandle = 0
$jobHandle = 0
;$jobHandle = VixVM_PowerOn ($vmHandle, $VIX_VMPOWEROP_NORMAL, $VIX_INVALID_HANDLE, 0, 0)
$aRes2 = DllCall ($vixdll, "INT:cdecl", "VixVM_PowerOn", "INT", $vmHandle, "INT", 0, "INT", 0, "PTR", 0, "PTR", 0)
ConsoleWriteArray($ares2)
$err = VixJob_Wait ($aRes2[0], $VIX_PROPERTY_NONE)
ConsoleWrite("---" & @error & "----" & $err & @CRLF)
DllClose($vixdll)
[/autoit]Hier nochmal als zip inklusive der "Vorbereiteten" VIXEasy.au3 mit allen Befehlen zum includen und der DLL selbst (funzt mindestens bis ESX 4.1 U1)