kompilieren mit PB 5.4 Beta 1 API-Aufrufe

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

kompilieren mit PB 5.4 Beta 1 API-Aufrufe

Beitrag von NicknameFJ »

Hallo zusammen,

die 5.40 Beta 1 ist raus :D ***freu***

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
 
kompiliert mit 5.24 und 5.31 einwandfrei jedoch nicht mit 5.40

Fehler

Code: Alles auswählen

---------------------------
PureBasic
---------------------------
Zeile 33: Falscher Parameter-Typ, Zahl anstelle eines Strings erwartet.
---------------------------
OK   
---------------------------
in dieser Zeile

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 :mrgreen:

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???????_() 
aufgerufen wird und der String übergeben wird. KeyName (als String) wird immer angemeckert dass hier eine Zahl erwartet wird.


Jemand eine Idee?

Danke

NicknameFJ
Zuletzt geändert von NicknameFJ am 08.09.2015 19:39, insgesamt 1-mal geändert.
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: kompilieren mit PB 5.4 Beta 1

Beitrag von _JON_ »

Schein ein Bug zu sein: http://www.purebasic.fr/english/viewtop ... =4&t=62978

Alle API's die normalerweise "Strings" akzeptieren wollen nun *Pointer:
error = RegOpenKeyEx_(topKey, @KeyName, 0, #KEY_ENUMERATE_SUB_KEYS, @hKey)
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: kompilieren mit PB 5.4 Beta 1

Beitrag von NicknameFJ »

Danke _JON_ für den Link ins Englische. Da habe ich noch nicht geschaut.

Ich probiere dann mal ob ich es hinbekomme sonst melde ich mich nochmal

NicknameFJ
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: kompilieren mit PB 5.4 Beta 1

Beitrag von ts-soft »

Die neu Importierten API Libs, wollen jetzt Pointer statt Strings, da der Importeur ja nicht Wissen kann, was da benötigt wird.
Ob Fred das so läßt oder die zig tausende von API aufrufen anpaßt weiß ich nicht. Viel schlimmer wird es aber bei Quads, Double
usw. sein :mrgreen:

Am besten die API selbst importieren!

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: kompilieren mit PB 5.4 Beta 1

Beitrag von c4s »

ts-soft hat geschrieben:[...] Ob Fred das so läßt oder die zig tausende von API aufrufen anpaßt weiß ich nicht. Viel schlimmer wird es aber bei Quads, Double usw. sein
Ziel ist es wohl alles, mit Hilfe der User, entsprechend anzupassen:
Fred hat geschrieben:[...] We also published all the API imports file on the same SVN than the documention (available for all in read-only), so if you want to help to improve them (by putting the right type where needed, or changing the argument names to be more explicits) you can check out it and publish the patches: svn://svn.purebasic.fr/home/svn/Documentation/v5.40
Edit:
Hier der offizielle Thread zum Thema: http://www.purebasic.fr/english/viewtop ... =4&t=62995
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: kompilieren mit PB 5.4 Beta 1

Beitrag von ts-soft »

Die registry_module.pbi ist gefixed: http://www.purebasic.fr/english/viewtop ... 72#p422572
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: kompilieren mit PB 5.4 Beta 1

Beitrag von NicknameFJ »

Danke ts-soft :allright:
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: kompilieren mit PB 5.4 Beta 1

Beitrag von lite »

Hallo

Eine Frage. Mit der neuen Beta 5.40 -3 ändern sich die Win-API-Aufrufe.
Das ist mir klar.

Code: Alles auswählen

SendMessage_(GadgetID(#e_procmsg),#EM_REPLACESEL,0,"text"+#CRLF$)
Wie kann ich direkt einen Pointer einer Zeichenkette verwenden ?

Mit einem direkten @Zeichen davor geht es nicht. Gibt es da eine schreibweise wie er direkte Zeichenketten als Pointer in PureBasic verarbeiten kann.

Code: Alles auswählen

SendMessage_(GadgetID(#e_procmsg),#EM_REPLACESEL,0,@"text"+#CRLF$)
Grüße

Lite
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: kompilieren mit PB 5.4 Beta 1

Beitrag von Kiffi »

nicht ganz so direkt, wie Du es wahrscheinlich gerne haben möchtest:

Code: Alles auswählen

la.s = "text"+#CRLF$
SendMessage_(GadgetID(#e_procmsg),#EM_REPLACESEL,0,@la)
Grüße ... Peter
a²+b²=mc²
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: kompilieren mit PB 5.4 Beta 1

Beitrag von _JON_ »

lite hat geschrieben:

Code: Alles auswählen

SendMessage_(GadgetID(#e_procmsg),#EM_REPLACESEL,0,"text"+#CRLF$)
Wie kann ich direkt einen Pointer einer Zeichenkette verwenden ?
Direkt leider gar nicht. Also erst den String komplett zusammensetzen und dann die API aufrufen.

stext.s = "text"+#CRLF$
SendMessage_(GadgetID(#e_procmsg),#EM_REPLACESEL,0,@stext.s)

Allerdings gute nachrichten, Fred überlegt sich das ganze noch mal :allright:
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Antworten