ANSIからUnicodeに変換して戻す際に問題があります。次のコードは、私がやっていることを説明しています。私は0x57エラーが発生します。..いくつかのより多くの引数がByValキーワードを渡す必要がQB64のWideCharToMultiByte
DECLARE DYNAMIC LIBRARY "kernel32"
FUNCTION MultiByteToWideChar& (codePage~&, dwFlags~&, lpszMbstring$, byteCount&, lpwszWcstring$, wideCount&)
FUNCTION WideCharToMultiByte& (codePage~&, dwFlags~&, lpWideString$, BYVAL ccWideChar%, lpMultiByte$, BYVAL multibyte%, BYVAL defaultchar&, BYVAL usedchar&)
FUNCTION GetLastError&()
END DECLARE
DIM Filename AS STRING * 260, NewFilename AS STRING * 260, MultiByte AS STRING * 260
PRINT "Enter filename";: INPUT Filename$: 'Filename$ = Filename$ + CHR$(0)
x = MultiByteToWideChar(0, 0, Filename$, LEN(Filename$), NewFilename$, 260)
IF x = 0 THEN
PRINT "Error 0x"; HEX$(GetLastError)
ELSE
PRINT "Processing: "; NewFilename$
END IF
' do unicode stuff here
x = WideCharToMultiByte(65001, 0, NewFilename$, LEN(NewFilename$), MultiByte$, 0, 0, 0)
' display processed filename
IF x = 0 THEN
PRINT "Error 0x"; HEX$(GetLastError)
ELSE
PRINT MultiByte$
END IF
[OK]を、おかげで再び:それは
NewFilename
の文字数であるためはまた
MultiByteToWideChar
の戻り値を使用したいと思います。それはちょうど私は一緒にすべてのコードをまとめるためにちょうどそれを行う必要があります。 – eoredsonところで:なぜFindFirstFileWはNULとして.cAlternateFilenameを返しますか? – eoredson
'cAlternateFilename'は' cAlternateFilename'がすでに8.3ファイル名でなければ、docsはDOS 8.3形式のファイル名が 'cAlternateFilename'にあると述べています。この場合、' cAlternateFilename'は空文字列です。例えば 'foo.txt'は空の' cAlternateFilename'メンバーになり、 'HelloWorld.txt'と' foo.config'は 'HelloW〜1.txt'と' foo〜7.con'になります。 –