ANSI에서 유니 코드로 변환하는 데 문제가 있습니다. 다음 코드는 내가하는 일을 설명합니다. 내가의 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
좋아, 다시 한번 감사 : 그것은
NewFilename
의 문자 수이기 때문에는 또한
MultiByteToWideChar
의 반환 값을 사용할 수 있습니다. 그게 단지 잠시 동안 내가 함께 모든 코드를 조각에 대해해야합니다 .. – eoredson왜 : FindFirstFileW 반환합니다. cAlternateFilename NUL로? – eoredson
docs는'cAlternateFilename'이 이미 8.3 파일 이름이 아닌 한 DOS 8.3 형식 파일 이름이'cAlternateFilename'에있을 것이라고 말합니다.이 경우'cAlternateFilename'은 빈 문자열입니다. 예를 들어,'foo.txt'는 빈'cAlternateFilename' 멤버가되고, 반면에'HelloWorld.txt'와'foo.config'는'HelloW ~ 1.txt'와'foo ~ 7.con'이 될 것입니다. –