Global $mDllLib[1][4] Global Const $DLL_MESSAGEBOX = _DllDefine("user32.dll", "int MessageBox(hwnd handle, str text, str caption, uint type)") Global Const $DLL_BEEP = _DllDefine("kernel32.dll", "int Beep(int frequency, int duration)") _DllCall($DLL_MESSAGEBOX, 0, "AutoIt Rocks", "Manadar says hi!", 0) _DllCall($DLL_BEEP, 500, 100) ; DllCall rewritten for performance by Manadar ; UDF Starts here: ;Global $mDllLib[1][4] ;; UNCOMMENT THIS LINE IF YOU ARE MOVING THIS CODE INTO A SEPERATE FILE #include Func _DllDefine($pDll, $pString) $lDim = UBound($mDllLib, 1) ReDim $mDllLib[$lDim + 1][4] If (IsString($pDll)) Then $mDllLib[$lDim][0] = DllOpen($pDll) If @error Then Return @error EndIf Else $mDllLib[$lDim][0] = $pDll EndIf $lSplit = StringSplit($pString, " (),", 0) $mDllLib[$lDim][1] = $lSplit[1] ; return type $mDllLib[$lDim][2] = $lSplit[2] ; functions Dim $n = 0 ; Creates an array with parameter types Dim $lParams[1] For $i = 3 To $lSplit[0] Step 3 $n += 1 ReDim $lParams[$n + 1] $lParams[$n] = $lSplit[$i] Next $mDllLib[$lDim][3] = $lParams Return $lDim EndFunc ;==>_DllDefine Func _DllCall($pID, $vParam1 = 0, $vParam2 = 0, $vParam3 = 0, $vParam4 = 0, $vParam5 = 0, $vParam6 = 0, $vParam7 = 0, $vParam8 = 0, $vParam9 = 0, $vParam10 = 0, $vParam11 = 0 _ , $vParam12 = 0, $vParam13 = 0, $vParam14 = 0, $vParam15 = 0, $vParam16 = 0, $vParam17 = 0, $vParam18 = 0, $vParam19 = 0, $vParam20 = 0, $vParam21 = 0, $vParam22 = 0, $vParam23 = 0, $vParam24 = 0 _ , $vParam25 = 0, $vParam26 = 0, $vParam27 = 0, $vParam28 = 0, $vParam29 = 0, $vParam30 = 0, $vParam31 = 0, $vParam32 = 0) $lParams = $mDllLib[$pID][3] Switch UBound($lParams) - 1 Case 0 Return DllCall($mDllLib[$pID][0], $mDllLib[$pID][1], $mDllLib[$pID][2]) Case 1 Return DllCall($mDllLib[$pID][0], $mDllLib[$pID][1], $mDllLib[$pID][2], $lParams[1], $vParam1) Case 2 Return DllCall($mDllLib[$pID][0], $mDllLib[$pID][1], $mDllLib[$pID][2], $lParams[1], $vParam1, $lParams[2], $vParam2) Case 3 Return DllCall($mDllLib[$pID][0], $mDllLib[$pID][1], $mDllLib[$pID][2], $lParams[1], $vParam1, $lParams[2], $vParam2, $lParams[3], $vParam3) Case 4 Return DllCall($mDllLib[$pID][0], $mDllLib[$pID][1], $mDllLib[$pID][2], $lParams[1], $vParam1, $lParams[2], $vParam2, $lParams[3], $vParam3, $lParams[4], $vParam4) Case 5 Return DllCall($mDllLib[$pID][0], $mDllLib[$pID][1], $mDllLib[$pID][2], $lParams[1], $vParam1, $lParams[2], $vParam2, $lParams[3], $vParam3, $lParams[4], $vParam4, $lParams[5], $vParam5) ; I got bored doing this. Someone continue it please. Case Else SetError(1) Return 0 EndSwitch EndFunc ;==>_DllCall