wchar_t *fname = L"fname.png" - что есть 'L'
Какая функция делает аналогичное преобразование?
Программирую на C++Builder 6.
//-----------------
и везде, где у тебя строковый литерал "SomeText" пиши не L"SomeText", а _T("SomeText").
Какая функция делает аналогичное преобразование?
Программирую на C++Builder 6.
представление строки в UNICODе, можносделать с помощью MultiByteToWideChar
#include "tchar.h"
//-----------------
и везде, где у тебя строковый литерал "SomeText" пиши не L"SomeText", а _T("SomeText").
Пишу:
Получаю:
Error: Cannot convert 'char*' to 'wchar_t*'
[quote=vAC]
представление строки в UNICODе, можносделать с помощью MultiByteToWideChar
[/quote]
Пишу:
Получаю:
Error: Cannot convert 'char*' to 'unsigned int'
Какие еще есть варианты?
Я загружаю Image, работаю с библиотекой Gdiplus.
Даже если напишешь:
Получается не идентичное преобразование как с 'L', потому что изображение тогда не загружается!! - ошибки не происходит не на этапе компиляции, не в run-time. Изображение просто не отображается.
Повторю меня не интересует как другими способами загрузить изображение в Gdiplus::Image - пока меня интересует только что такое 'L' и какая функция ему идентична!
Пишу:
Получаю:
Error: Cannot convert 'char*' to 'wchar_t*'
Пишу:
Получаю:
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
Я загружаю Image, работаю с библиотекой Gdiplus.
Даже если напишешь:
Получается не идентичное преобразование как с 'L', потому что изображение тогда не загружается!! - ошибки не происходит не на этапе компиляции, не в run-time. Изображение просто не отображается.
Повторю меня не интересует как загрузить изображение в Gdiplus::Image - меня интересует что такое 'L' и какая функция ему идентична!
Если проект не UNICODE, то
wchar_t *fname = (wchar_t *)_T("fname.png");
-грубая ошибка: ты просто строку ANSI подсовывешь как UNICODE
Можешь объяснить, что такое 'юникодный' проект?
Странное объяснение:)
Да и не думаю, что для двух строчек кода стоит менять настройки проекта!!
Ладно - сам почитаю!;)
Вкладки General в С++Builder 6 - нет, может в 2003 она появилась - я еще не видел, да и пока видеть не хочу)
В любом случае по ключевым словам 'character set' нашел в Help'е функции преобразования:
Вот чо получилось:
StringToWideChar("fname.png", fname, 10);
img = new Gdiplus::Image(fname);
delete[] fname;
Функция из тех, что предложил vAC..
Все летает!!
Так что <SCORP> и vAC - большое спасибо..
<SCORP> +1
vAC +1
Вкладки General в С++Builder 6 - нет, может в 2003 она появилась
эээ... я вобще про Visual Studio :) не знаю вообще, есть в билдере макрос _T() или нету. но если проект не юникодный, то тогда надо пользоваться функциями преобразования из обычного char и wchar
Я же написал в первом посте, что работаю в Builder'e!!!
_T в Builder'e как ты уже наверно понял тоже есть!!
StringToWideChar("fname.png", fname, 10);
img = new Gdiplus::Image(fname);
delete[] fname;
Любишь сложности? :)
img = new Gdiplus::Image(fname);
Если метод Gdiplus::Image принимает в зависимости от настроек проекта char или wchar_t, то пиши так:
img = new Gdiplus::Image(fname);
Я же написал в первом посте, что работаю в Builder'e!!!
сорри, провтык! :)