Hm - also das sagt erstmal ziemlich eindeutig was der Fehler angeblich sein soll:
Der Parameter der DLLStructCreate-Funktion ist kein String!
Kann ich aber absolut nicht nachvollziehen.
Welche AutoIt-Version hast du aktuell denn drauf? - teste auch ruhig mal die neueste Beta oder so.
Zumindestens ist der angegebene Fehler meiner Meinung nach Humbug - das ist definitiv ein String...
Du kannst es höchstens nochmal so probieren aber das ändert meiner Meinung nach nichts an der Ausgangslage:
Spoiler anzeigen
If _ChangeWorkgroup("TEST") Then MsgBox(0, "", "Änderung der Arbeitsgruppe erfolgreich!")
MsgBox(0, "", "Fehlercode: " & @error & @CRLF & "Extended: " & @extended)
;===============================================================================
;
; Function Name: _ChangeWorkgroup()
; Description: Change computer´s workgroup
; Parameter(s): $WGName = new workgroup name
; [$PCName] = name of the network pc-name
; Requirement(s): Netapi32.dll
; Return Value(s): On Success - 1
; @extended: DLL-Func Return Value
; On Failure - 0 and sets @ERROR
; 1: failure creating structure
; 2: failure setting data
; 3: failure get pointer
; 4: failure dll-call
; (func-errors --> @extended)
; Note(s): may require reboot to take effect
; Author(s): [email='AspirinJunkie@german-nlite.de'][/email]
;
;===============================================================================
Func _ChangeWorkgroup($WGName, $PCName = @ComputerName)
Local $struct[3], $Ptr[3], $Return
$struct[0] = DllStructCreate(String('wchar[' & StringLen($WGName) + 1 & ']'))
If @error Then Return SetError(1, @error, 0)
$struct[1] = DllStructCreate(String('wchar[1]'))
If @error Then Return SetError(1, @error, 0)
$struct[2] = DllStructCreate(String('wchar[' & StringLen($PCName) + 1 & ']'))
If @error Then Return SetError(1, @error, 0)
DllStructSetData($struct[0], 1, $WGName)
If @error Then Return SetError(2, @error, 0)
DllStructSetData($struct[1], 1, '')
If @error Then Return SetError(2, @error, 0)
DllStructSetData($struct[2], 1, $PCName)
If @error Then Return SetError(2, @error, 0)
$Ptr[0] = DllStructGetPtr($struct[0])
If @error Then Return SetError(3, @error, 0)
$Ptr[1] = DllStructGetPtr($struct[1])
If @error Then Return SetError(3, @error, 0)
$Ptr[2] = DllStructGetPtr($struct[2])
If @error Then Return SetError(3, @error, 0)
$Return = DllCall('Netapi32.dll', 'int', 'NetJoinDomain', "ptr", $Ptr[2], "ptr", $Ptr[0], "ptr", $Ptr[1], "ptr", $Ptr[1], "ptr", $Ptr[1], "dword", 0)
If @error Then Return SetError(4, @error, 0)
Return SetError(0, $Return[0], 1)
EndFunc ;==>_ChangeWorkgroup
Ansonsten sehe ich keine Ansätze mehr warum ausgerechnet dieser Fehler kommt... - kann dieses Phänomen noch jemand bestätigen?