Ascii-String an Unicode-Dll übergeben ?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Ascii-String an Unicode-Dll übergeben ?

Beitrag von ccode_new »

Hallo Leute,

ich habe das Problem das ich eine 32 bit Dll für ein anderes Programm benötige.

Dieses Programm kommt nur mit ASCII 32 bit Dll's klar. (64 bit geht nicht!)

Jetzt möchte ich eine Textdatei von UTF-8 in "Windows-Unicode" = UTF-16 konvertieren.

Das funktioniert als EXE-Datei auch wunderbar, aber wenn der Dll im Zielprogramm etwas übergeben wird dann nur als ASCII.
Dabei stimmt dann aber der Pfad nicht mehr.
(Es werden nur noch kryptische/falsche Zeichen als Pfad übergeben.)

Code: Alles auswählen

ProcedureCDLL UnicodeConvert(File$)
  Pfad$ = GetPathPart(File$)
  MessageRequester("Test",File$)
  Name$ = GetFilePart(File$, #PB_FileSystem_NoExtension)
  If ReadFile(0, File$, #PB_UTF8)
    If CreateFile(1, Pfad$+Name$+"_U.txt")
      While Eof(0) = 0
        WriteStringN(1, ReadString(0), #PB_Unicode)
      Wend
      CloseFile(1)
    EndIf
    CloseFile(0)
  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
  EndIf
EndProcedure
Ich muss die Textdatei von UTF-8 in Unicode konvertieren, weil sonst die falschen Zeichen dargestellt werden.

Das Programm was die DLL aufruft kann das auch nur per CDECL, ansonsten stürzt es ab.

Also damit es funktioniert muss aber File$ als ASCII übergeben werden, sonst zeigt mir die MsgBox nur falsche Zeichen an.

Wie mache ich das?
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Ascii-String an Unicode-Dll übergeben ?

Beitrag von ccode_new »

Hallo Leute!

Das Thema hat sich erledigt.

Ich hab's hinbekommen.

Code: Alles auswählen

ProcedureCDLL UnicodeConvert(*File)
  FileX$ = PeekS(*File,-1,#PB_UTF8) ;das ist wichtig!
  Pfad$ = GetPathPart(FileX$)
  MessageRequester("Test",FileX$)
  Name$ = GetFilePart(FileX$, #PB_FileSystem_NoExtension)
  If ReadFile(0, FileX$, #PB_UTF8)
    If CreateFile(1, Pfad$+Name$+"_U.txt")
      While Eof(0) = 0
        WriteStringN(1, ReadString(0), #PB_Unicode)
      Wend
      CloseFile(1)
    EndIf
    CloseFile(0)
  Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
  EndIf
EndProcedure
So funktioniert das für mich.

(Ich hatte das Problem vielleicht auch etwas schlecht beschrieben.)
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
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: Ascii-String an Unicode-Dll übergeben ?

Beitrag von ts-soft »

(Ich hatte das Problem vielleicht auch etwas schlecht beschrieben.)
Naja, hauptsache Du hast das Problem gelöst und ich brauch nicht mehr Nachzudenken, was Du überhaupt willst oder meinst :mrgreen:
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
Antworten