Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

wchar_t *fname = L"fname.png" - что есть 'L'

263
27 января 2007 года
koltaviy
816 / / 16.12.2004
Народ, расскажите, что такое L перед строкой?
Какая функция делает аналогичное преобразование?
Программирую на C++Builder 6.
63
27 января 2007 года
Zorkus
2.6K / / 04.11.2006
#include "tchar.h"

//-----------------

и везде, где у тебя строковый литерал "SomeText" пиши не L"SomeText", а _T("SomeText").
505
27 января 2007 года
vAC
343 / / 28.02.2006
Цитата: koltaviy
Народ, расскажите, что такое L перед строкой?
Какая функция делает аналогичное преобразование?
Программирую на C++Builder 6.



представление строки в UNICODе, можносделать с помощью MultiByteToWideChar

263
28 января 2007 года
koltaviy
816 / / 16.12.2004
Спасибо!!
263
28 января 2007 года
koltaviy
816 / / 16.12.2004
wchar_t *fname = _T("")
Цитата: Zorkus

#include "tchar.h"
//-----------------

и везде, где у тебя строковый литерал "SomeText" пиши не L"SomeText", а _T("SomeText").


Пишу:

 
Код:
wchar_t *fname = _T("fname.png");

Получаю:
Error: Cannot convert 'char*' to 'wchar_t*'

[quote=vAC]
представление строки в UNICODе, можносделать с помощью MultiByteToWideChar
[/quote]
Пишу:
 
Код:
wchar_t *fname = MultiByteToWideChar("fname.png");

Получаю:
Error: Cannot convert 'char*' to 'unsigned int'

Какие еще есть варианты?
355
28 января 2007 года
<SCORP>
786 / / 21.10.2006
у тебя проект не юникодный. макрос _T(x) разворачивается в Lx в юникодном проекте и просто в x в неюникодном
263
28 января 2007 года
koltaviy
816 / / 16.12.2004
Наверно надо уточнить..
Я загружаю Image, работаю с библиотекой Gdiplus.
Даже если напишешь:
 
Код:
wchar_t *fname = (wchar_t *)_T("fname.png");

Получается не идентичное преобразование как с 'L', потому что изображение тогда не загружается!! - ошибки не происходит не на этапе компиляции, не в run-time. Изображение просто не отображается.

Повторю меня не интересует как другими способами загрузить изображение в Gdiplus::Image - пока меня интересует только что такое 'L' и какая функция ему идентична!
505
28 января 2007 года
vAC
343 / / 28.02.2006
Цитата: koltaviy
wchar_t *fname = _T("")

Пишу:
 
Код:
wchar_t *fname = _T("fname.png");

Получаю:
Error: Cannot convert 'char*' to 'wchar_t*'


Пишу:
 
Код:
wchar_t *fname = MultiByteToWideChar("fname.png");

Получаю:
Error: Cannot convert 'char*' to 'unsigned int'

Какие еще есть варианты?



C MultiByteToWideChar не все так просто :) прототип таков:

int MultiByteToWideChar(
UINT CodePage, // code page
DWORD dwFlags, // character-type options
LPCSTR lpMultiByteStr, // string to map
int cbMultiByte, // number of bytes in string
LPWSTR lpWideCharStr, // wide-character buffer
int cchWideChar // size of buffer
);
либо используй mbtowc
int mbtowc( wchar_t *wchar, const char *mbchar, size_t count );

а wchar_t *fname = _T("fname.png"); не работет, т.к. проект у тебя не UNICODE

505
28 января 2007 года
vAC
343 / / 28.02.2006
Цитата: koltaviy
Наверно надо уточнить..
Я загружаю Image, работаю с библиотекой Gdiplus.
Даже если напишешь:
 
Код:
wchar_t *fname = (wchar_t *)_T("fname.png");

Получается не идентичное преобразование как с 'L', потому что изображение тогда не загружается!! - ошибки не происходит не на этапе компиляции, не в run-time. Изображение просто не отображается.

Повторю меня не интересует как загрузить изображение в Gdiplus::Image - меня интересует что такое 'L' и какая функция ему идентична!



Если проект не UNICODE, то
wchar_t *fname = (wchar_t *)_T("fname.png");
-грубая ошибка: ты просто строку ANSI подсовывешь как UNICODE

263
28 января 2007 года
koltaviy
816 / / 16.12.2004
[quote=<SCORP>;169980]у тебя проект не юникодный. макрос _T(x) разворачивается в Lx в юникодном проекте и просто в x в неюникодном[/quote]
Можешь объяснить, что такое 'юникодный' проект?
355
28 января 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
заходишь в свойства проекта и на вкладке general есть параметр character set. в 6-ой и 2003-ей студии по умолчанию стоит multibyte string, ставь там unicode
263
28 января 2007 года
koltaviy
816 / / 16.12.2004
[quote=<SCORP>;169990]заходишь в свойства проекта и на вкладке general есть параметр character set. в 6-ой и 2003-ей студии по умолчанию стоит multibyte string, ставь там unicode[/quote]
Странное объяснение:)
Да и не думаю, что для двух строчек кода стоит менять настройки проекта!!
Ладно - сам почитаю!;)
Вкладки General в С++Builder 6 - нет, может в 2003 она появилась - я еще не видел, да и пока видеть не хочу)
В любом случае по ключевым словам 'character set' нашел в Help'е функции преобразования:
Вот чо получилось:
 
Код:
wchar_t *fname = new wchar_t[10];
StringToWideChar("fname.png", fname, 10);
img = new Gdiplus::Image(fname);
delete[] fname;

Функция из тех, что предложил vAC..
Все летает!!
Так что <SCORP> и vAC - большое спасибо..
<SCORP> +1
vAC +1
355
28 января 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
Цитата: koltaviy

Вкладки General в С++Builder 6 - нет, может в 2003 она появилась



эээ... я вобще про Visual Studio :) не знаю вообще, есть в билдере макрос _T() или нету. но если проект не юникодный, то тогда надо пользоваться функциями преобразования из обычного char и wchar

263
28 января 2007 года
koltaviy
816 / / 16.12.2004
Я думал, что ты Builder студией назвал(типа 'студия' для разработки ;)), а про 2003 - думал ты последний который вышел имеешь в виду(правда он 2006 по-моему)..
Я же написал в первом посте, что работаю в Builder'e!!!
_T в Builder'e как ты уже наверно понял тоже есть!!
3
28 января 2007 года
Green
4.8K / / 20.01.2000
Цитата: koltaviy

 
Код:
wchar_t *fname = new wchar_t[10];
StringToWideChar("fname.png", fname, 10);
img = new Gdiplus::Image(fname);
delete[] fname;


Любишь сложности? :)

 
Код:
const wchar_t* fname = L"fname.png";
img = new Gdiplus::Image(fname);

Если метод Gdiplus::Image принимает в зависимости от настроек проекта char или wchar_t, то пиши так:
 
Код:
LPCTSTR fname = TEXT("fname.png");
img = new Gdiplus::Image(fname);
355
28 января 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
Цитата: koltaviy

Я же написал в первом посте, что работаю в Builder'e!!!



сорри, провтык! :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог