Seite 1 von 1

Ascii-String an Unicode-Dll übergeben ?

Verfasst: 11.03.2017 16:13
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?

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

Verfasst: 11.03.2017 19:48
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.)

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

Verfasst: 11.03.2017 19:59
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: