Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.04.2017, 21:06
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
Злость Из PansiChar в String (и WideString) Delphi 2010

Здравствуйте.

Проблема в том, функция DLL* возвращает PansiChar.
Не могу понять\найти как конвертировать в String ибо русские буквы кракозябры, но не всегда**.

* == Bass.dll.
** онлайн радио. Например 'РадиоСибирь' исполнитель и название пишется нормально.
А вот RadioRcord rus черти что, в WMP все ОК.


Как правильно сделать?

Последний раз редактировалось Stalker2-42, 23.04.2017 в 18:25.
Ответить с цитированием
  #2  
Старый 12.04.2017, 00:05
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Делфи должна сама преобразовывать PAnsiChar в String/WideString при присваивании без явного преобразования типов.
Может быть проблема в том, что строка как раз-таки не всегда PAnsiChar? Посмотри под отладкой значения в памяти по указателю PAnsiChar в обоих случаях.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 12.04.2017, 01:02
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не совсем так. С юникодом там чуть-чуть посложнее.
Попробуй примерно так:
Код:
type
  TCyrString = AnsiString(1251); // указываем кодовую страницу
var
  a_s : TCyrString;
  apc : PAnsiChar;
  s : String; // UnicodeString by default
begin
  ...
  dll_function_call(apc);
  a_s := TCyrString(apc);
  s := a_s;
Собственно, мы принудительно сообщаем компилятору кодовую страницу для AnsiString. Ну а дальше он должен все сделать сам.

Последний раз редактировалось lmikle, 12.04.2017 в 17:59.
Ответить с цитированием
  #4  
Старый 12.04.2017, 18:24
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Не совсем так. С юникодом там чуть-чуть посложнее.
Попробуй примерно так:
Код:
type
  TCyrString = AnsiString(1251); // указываем кодовую страницу
var
  a_s : TCyrString;
  apc : PAnsiChar;
  s : String; // UnicodeString by default
begin
  ...
  dll_function_call(apc);
  a_s := TCyrString(apc);
  s := a_s;
Собственно, мы принудительно сообщаем компилятору кодовую страницу для AnsiString. Ну а дальше он должен все сделать сам.


К сожалению так же и осталось.
Подсмотрел здесь
Осмелюсь поправить.....

Код:
type
  TCyrString = type AnsiString(1251); // указываем кодовую страницу

Почему-то изменения цвета в коде не работает.

У меня так:
Код:
var
  meta: PAnsiChar;
  Sstr  : String;
......

Meta :=DLL_Func();
....
Sstr := Utf8ToWideString(meta);
И к стати, работает, не думаю что так будет работать всегда.
Как-то очень просто.

Может еще какие варианты имеются?
Ответить с цитированием
  #5  
Старый 12.04.2017, 22:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Осмелюсь поправить....

ну, да. Сорь... про...зевал... по инерции просто type нашкрябал.

Utf8ToWideString... а что в доке на тему возращаемого значения написано??? Т.е. если там действительно возвращается UTF-8, то будет работать. Тюею надо смотреть что же возвращает функция... бо как PAnsiChar, как я понимаю, просто для совместимости с char*
Ответить с цитированием
  #6  
Старый 12.04.2017, 23:56
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Utf8ToWideString... а что в доке на тему возращаемого значения написано?
WideString.

Чуть позже еще поработаю над этим.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:09.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter