kompilieren mit PB 5.4 Beta 1 API-Aufrufe
Verfasst: 31.08.2015 21:01
Hallo zusammen,
die 5.40 Beta 1 ist raus
***freu***
aber
aus der Registry.pbi von ts-soft habe ich dieses Stück Code
kompiliert mit 5.24 und 5.31 einwandfrei jedoch nicht mit 5.40
Fehler
in dieser Zeile
Verstehe ich gerade nicht, da RegOpenKeyEx ein WinApi-Aufruf ist. Ich bin mir fast sicher dass Microsoft hier nichts geändert hat
Warum will der Compiler 5.40 dass KeyName eine Zahl ist???
Wohlgemerkt: 5.24 LTS und 5.31 komilieren problemlos
Der selbe Fehler tritt in allen Proceduren auf - aus der Registry.pbi von ts-Soft - in denen
aufgerufen wird und der String übergeben wird. KeyName (als String) wird immer angemeckert dass hier eine Zahl erwartet wird.
Jemand eine Idee?
Danke
NicknameFJ
die 5.40 Beta 1 ist raus

aber
aus der Registry.pbi von ts-soft habe ich dieses Stück Code
Code: Alles auswählen
Structure RegValue
TYPE.l ; like: #REG_BINARY, #REG_DWORD ...
SIZE.l
ERROR.l
ERRORSTR.s
DWORD.l ; #REG_DWORD
QWORD.q ; #REG_QWORD
*BINARY ; #REG_BINARY
STRING.s ; #REG_EXPAND_SZ, #REG_MULTI_SZ, #REG_SZ
EndStructure
Procedure.s GetLastErrorStr(error)
Protected Buffer.i, result.s
If FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER | #FORMAT_MESSAGE_FROM_SYSTEM, 0, error, 0, @Buffer, 0, 0)
result = PeekS(Buffer)
LocalFree_(Buffer)
ProcedureReturn result
EndIf
EndProcedure
Procedure.i XP_DeleteTree(topKey, KeyName.s, *Ret.RegValue = 0)
Protected hKey, error, dwSize.l, sBuf.s = Space(260)
If Left(KeyName, 1) = "\" : KeyName = Right(KeyName, Len(KeyName) - 1) : EndIf
If Right(KeyName, 1) = "\" : KeyName = Left(KeyName, Len(KeyName) - 1) : EndIf
If *Ret <> 0
ClearStructure(*Ret, RegValue)
EndIf
error = RegOpenKeyEx_(topKey, KeyName, 0, #KEY_ENUMERATE_SUB_KEYS, @hKey)
If error
If *Ret <> 0
*Ret\ERROR = error
*Ret\ERRORSTR = GetLastErrorStr(error)
EndIf
Debug GetLastErrorStr(error)
If hKey
RegCloseKey_(hKey)
EndIf
ProcedureReturn #False
EndIf
Repeat
dwSize.l = 260
error = RegEnumKeyEx_(hKey, 0, @sBuf, @dwSize, 0, 0, 0, 0)
If Not error
XP_DeleteTree(hKey, sBuf)
EndIf
Until error
RegCloseKey_(hKey)
error = RegDeleteKey_(topKey, KeyName)
If error
If *Ret <> 0
*Ret\ERROR = error
*Ret\ERRORSTR = GetLastErrorStr(error)
EndIf
Debug GetLastErrorStr(error)
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
Fehler
Code: Alles auswählen
---------------------------
PureBasic
---------------------------
Zeile 33: Falscher Parameter-Typ, Zahl anstelle eines Strings erwartet.
---------------------------
OK
---------------------------
Code: Alles auswählen
error = RegOpenKeyEx_(topKey, KeyName, 0, #KEY_ENUMERATE_SUB_KEYS, @hKey)
Verstehe ich gerade nicht, da RegOpenKeyEx ein WinApi-Aufruf ist. Ich bin mir fast sicher dass Microsoft hier nichts geändert hat

Warum will der Compiler 5.40 dass KeyName eine Zahl ist???
Wohlgemerkt: 5.24 LTS und 5.31 komilieren problemlos
Der selbe Fehler tritt in allen Proceduren auf - aus der Registry.pbi von ts-Soft - in denen
Code: Alles auswählen
error = Reg???????_()
Jemand eine Idee?
Danke
NicknameFJ