Действительно ли необходимо преобразовать строку в WideString в Delphi?

Потрясающий ответ и объяснение от @lhunath. Спас мой день. Я немного расширил это. Не мог контролировать себя, разделяя это - надеясь, что это может быть полезно для кого-то. Если кто-то должен проверить (массив) нескольких программ, вот быстрый фрагмент.

Что он делает? (1) Читать массив программ. (2) Показать сообщение для неудачной программы. (3) Предложить пользователю продолжить (принудительный цикл) опции y / n для проверки остальных программ.

#!/bin/bash

proginstalldir=/full/dir/path/of/installation
progsbindir=$proginstalldir/bin
echo -e "\nMy install directory - $proginstalldir"
echo -e "My binaries directory - $progsbindir"

VerifyInstall () {
clear
myprogs=( program1 program2 program3 program4 program5 programn ); 
echo -e "\nValidation of my programs started...."
for ((i=0; i<${#myprogs[@]}; i++)) ; do 
command -v $progsbindir/${myprogs[i]} >/dev/null && echo -e "Validating....\t${myprogs[i]}\tSUCCESSFUL"  || { echo -e "Validating.... \t${myprogs[i]}\tFAILED" >&2;
while true; do 
printf "%s:  "  "ERROR.... Validation FAILED for ${myprogs[i]} !!!! Continue?"; read yn; 
case $yn in [Yy] )  echo -e "Please wait..." ; break;;
[Nn]) echo -e "\n\n#################################\n##   Validation Failed .. !!   ##\n#################################\n\n" ; exit 1; break;;
*) echo -e "\nPlease answer y or n then press Enter\n"; esac; done; >&2; }; done
sleep 2
}

VerifyInstall
19
задан Peter Mortensen 27 January 2016 в 16:00
поделиться

2 ответа

Имейте в виду, что приведение строки к WideString приведет к преобразуйте его, используя системную кодовую страницу по умолчанию, которая может быть или не быть той, которая вам нужна. Обычно требуется использовать локаль текущего пользователя.

Из WCharFromChar в System.pas:

Result := MultiByteToWideChar(DefaultSystemCodePage, 0, CharSource, SrcBytes,
  WCharDest, DestChars);

Вы можете изменить DefaultSystemCodePage, вызвав SetMultiByteConversionCodePage .

11
ответ дан 30 November 2019 в 04:44
поделиться

There might be an ANSI variant for your function to (I haven't checked). Most Wide API's are available as an ANSI version too, just change the W suffix to an A, and you're set. Windows does the back-and-forth conversion transparantly for you in that case.

PS: Here's an article describing the lack of StrCmpLogicalA : http://blogs.msdn.com/joshpoley/archive/2008/04/28/strcmplogicala.aspx

3
ответ дан 30 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: