Помогите со string8 и отправкой в другое приложение

Список разделов foobar2000 Плагины SDK

Описание: Разработка плагинов для foobar2000 с использованием SDK.

Сообщение #1 stedy » 25.08.2007, 18:11

Здравствуйте!
Не могли бы вы мне помочь? Пишу небольшой плагин, который должен передавать информация о текущеё проигрываемой композиции в другую программу.

// Получауем информацию
pfc::string8 text;
static_api_ptr_t pc;
metadb_handle_ptr handle;;
if (pc->get_now_playing(handle)) {
service_ptr_t script;
if (titleformat_config::g_compile(titleformat_config::config_systray, script)) {
pc->playback_format_title_ex(handle, NULL, text, script, NULL, play_control::display_level_titles);
//return text;
}
}

// Вот здесь собственно и заковырка - как передать текст?
SendMessage(ctlStText ,WM_SETTEXT,0,(LPARAM)text);

Спасибо!
stedy
Автор темы
Репутация: 0
С нами: 17 лет 4 месяца

Сообщение #2 skipyrich » 25.08.2007, 18:35

Сначала нужно сконвертировать строку либо в ANSI либо в wide.

pfc::stringcvt::string_wide_from_utf8 textw(text);
SendMessage(ctlStText, WM_SETTEXT, 0, (LPARAM)textw.get_ptr());

или

pfc::stringcvt::string_ansi_from_utf8 texta(text);
SendMessage(ctlStText, WM_SETTEXT, 0, (LPARAM)texta.get_ptr());

какой вариант тебе необходим разберёшься на месте  :)
skipyrich M
Откуда: Москва
Репутация: 11
С нами: 18 лет 7 месяцев

Сообщение #3 stedy » 25.08.2007, 18:50

Спасибо за помощь! Но, блин, что-то ни один из вариантов не работает, точнее работает, но передаёт пустую строку.
Проверяю просто выводом MessageBox и непосредственно передавая в приложение :( Передавая просто char * - всё нормально...
Помогите пожалуйста! Плагин для фубара пишу второй день, всё готово - только здесь застопорился :(((

Может я неправильно инфу о треке пытаюсь получить?
stedy
Автор темы
Репутация: 0
С нами: 17 лет 4 месяца

Сообщение #4 skipyrich » 25.08.2007, 19:28

Для таких случаев существует отладчик. У тебя может обломиться на get_now_playing и g_compile, т.е. может быть плейер в данный момент ничего не воспроизводит, либо формат скрипта неверный, либо play_control::display_level_titles недостаточно в данном случае.
Пройдись под отладчиком.
skipyrich M
Откуда: Москва
Репутация: 11
С нами: 18 лет 7 месяцев

Сообщение #5 stedy » 25.08.2007, 19:54

Сначала хотел бы поблагодарить Вас за помощь! Спасибо!

Действительно проблема с определением информации. Не подскажете где можно прочитать об определении или показать готовый пример!

Ещё раз спасибо
stedy
Автор темы
Репутация: 0
С нами: 17 лет 4 месяца

Сообщение #6 skipyrich » 25.08.2007, 20:28

На hydrogenaudio.org, в соответствующем разделе форума...

Вот кусок из foo_np_simple:
Код: Выделить всё
bool g_format_title(const char *fmt, string8 &p_out)
{
   service_ptr_t<titleformat_object> script;
   static_api_ptr_t<play_control> pc;
   if(static_api_ptr_t<titleformat_compiler>()->compile(script,fmt)){
      metadb_handle_ptr h;
      if(!pc->get_now_playing(h) || h.is_empty()){
         playable_location_impl l;
         static_api_ptr_t<metadb>()->handle_create(h, l);
      }
      return pc->playback_format_title_ex(h, 0, p_out, script, 0, play_control::display_level_all);
   }
   return false;
}
но у меня была задача обеспечить форматирование строки в любом состоянии плейера, обычно создание пустого хендла и play_control::display_level_all излишни.
skipyrich M
Откуда: Москва
Репутация: 11
С нами: 18 лет 7 месяцев

Сообщение #7 stedy » 25.08.2007, 20:46

Спасибо! сейчас буду разбираться
stedy
Автор темы
Репутация: 0
С нами: 17 лет 4 месяца


Вернуться в SDK