Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

WSTRING als Rückgabewert

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Berkeley



Anmeldungsdatum: 13.05.2024
Beiträge: 97

BeitragVerfasst am: 15.08.2024, 18:05    Titel: WSTRING als Rückgabewert Antworten mit Zitat

- scheint nicht möglich.

Also dass man ne FUNCTION macht mystring=myfunc(), PRINT myfunc()... alles als WSTRING... NICHT WSTRING PTR...

Komisch, weil bei den eingebauten FreeBASIC-Funktionen geht's ja auch...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4709
Wohnort: ~/

BeitragVerfasst am: 15.08.2024, 20:48    Titel: Antworten mit Zitat

WSTRING (und ZSTRING) ist eigentlich immer ein Pointer. Ich glaube, die Builtin-Funktionen von FreeBASIC verstecken das nur., so wie es letztlich bei den WSTRINGs fester Länge versteckt wird.
Dass man keine fixed-length-WSTRINGs übergeben kann, hat vielleicht desselben Grund wie dass nur dynamische Arrays übergeben werden können (genauer gesagt: statische Arrays können zwar übergeben werden, werden dann aber in der Funktion wie dynamische Arrays behandelt).
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Monika



Anmeldungsdatum: 03.07.2025
Beiträge: 5

BeitragVerfasst am: 09.10.2025, 18:43    Titel: Antworten mit Zitat

Du hast recht, das ist tatsächlich eine Einschränkung in FreeBASIC. Benutzerdefinierte Funktionen können WSTRING leider nur als PTR zurückgeben, nicht direkt als Wert. Die internen Funktionen sind da speziell implementiert. Als Workaround kannst du einen WSTRING-Puffer außerhalb der Funktion bereitstellen oder einen WSTRING PTR zurückgeben und später mit DEALLOCATE freigeben. Ist nicht ganz elegant, aber momentan die beste Lösung. Hoffe, das hilft dir trotzdem!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Berkeley



Anmeldungsdatum: 13.05.2024
Beiträge: 97

BeitragVerfasst am: 10.10.2025, 16:25    Titel: Antworten mit Zitat

Code:

SUB UTF8TOUTF16(BYVAL source AS STRING, BYREF destination AS WSTRING, BYVAL size AS INTEGER)
  DIM AS INTEGER i, i2, l
  DIM AS UBYTE c
  ' #todo:/#note: only working on Little Endian systems
  ' big endian code should convert everything internally into Little Endian encoding

  destination[0]=&hFEFF
  l=LEN(source)
  i=0
  i2=1
  WHILE i2<size AND i<l
    c=source[i]
    IF c>127 THEN
      destination[i2]=UTF8GETCODE(MID(source, i+1))
      ' the first bits are telling how long a UTF-8 code is
      ' (maximum 4 bytes)
      IF (c AND 224)=192 THEN
        i+=2
      ELSEIF (c AND 240)=224 THEN
        i+=3
      ELSE
        i+=4
      ENDIF
    ELSE
      destination[i2]=c
      i+=1
    ENDIF
    i2+=1
  WEND
  IF i2>=size THEN i2=size-1
  destination[i2]=0
END SUB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz