Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Преобразование String в PwideChar   Найти похожие ветки 

 
Писатель   (2012-09-23 14:18) [0]

Используется RAD Studio XE. В интернетах удалось обнаружить по этой теме следущее.

var
 wideChars   : array[0..11] of WideChar;
 myString    : String;

begin
 // Задание значения нашей строке
 myString := "Hello World";

 // Копирование в формат WideChar в наш массив
 StringToWideChar(myString, wideChars, 12);

 // Показываем, что копирование дало
 ShowMessage(WideCharToString(wideChars));
end;


function StringToPWide(sStr: string; var iNewSize: integer): PWideChar;
var
 pw: PWideChar;
 iSize: integer;
begin
 iSize := Length(sStr) + 1;
 iNewSize := iSize * 2;

 pw := AllocMem(iNewSize);

 MultiByteToWideChar(CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize);

 Result := pw;
end;


Но ни первое ни второе не работает, а вылетает с ошибками. В первом случае ему не нравится, что ему вместо PWideChar передают массив, если заменить массив на PwideChar, то будет вылет по ошибке связанной с памятью в которую неправильно обратились. Во втором случае он начинает матюкаться на это PChar(sStr).

Вопрос, как же все такие его преобразовать? API функция требует PWideChar.


 
Писатель   (2012-09-23 14:31) [1]

Забавно вот так 50); работает

PWideName := StringToWideChar(choosenChar, PWideName, (Length(WindowName) +50)); а так нет


 
Писатель   (2012-09-23 14:31) [2]

PWideName := StringToWideChar(choosenChar, PWideName, 50); вот так )


 
Hole   (2012-09-23 16:26) [3]

Для наглядности:

var
 S: AnsiString;
 W: WideString;
 P: PWideChar;
begin
 S := "Hello, World!";
 W := S;
 P := PWideChar(W);
end;


Delphi сама выполняет преобразование между типами данных AnsiString, WideString и UnicodeString. Поытому можно вообще написать вот так: PWideChar(WideString(S)); но это будет временная переменная, а поэтому пользоваться этим можно только "по месту".

И по поводу того, что вы тут в трех постах написали:

function StringToWideChar(const Source: UnicodeString; Dest: PWideChar; DestSize: Integer): PWideChar;
Returns a UNICODE string from an AnsiString.
StringToWideChar converts a string from ANSI to UNICODE and stores the result in a specified buffer.
Source is the string to convert. It must include at most DestSize – 1 characters.
Dest is the buffer into which StringToWideChar writes the corresponding UNICODE string. The caller allocates this memory to include at least DestSize wide characters. Following the call, Dest contains at most DestSize - 1 characters, terminated by a NULL wide character.
DestSize is the size of the buffer Dest.
StringToWideChar returns a pointer to Dest.


Посмотрите, чему равно SizeOf(WideChar), и сделайте соотвествующие исправления в коде.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.063 c
2-1333194262
toropoff
2012-03-31 15:44
2013.03.22
= Record


15-1337109798
palva
2012-05-15 23:23
2013.03.22
Мы все под колпаком


15-1350592203
Юрий
2012-10-19 00:30
2013.03.22
С днем рождения ! 19 октября 2012 пятница


15-1341906232
Неграмотный
2012-07-10 11:43
2013.03.22
Неподтверждён или "не подтверждён" (слитно или раздельно)


15-1350903963
asafr
2012-10-22 15:06
2013.03.22
Экскурс в будущее (заметки путешественника по времени)