2010-06-11 3 views
0

Могу ли я узнать, как я могу выполнить следующее преобразование?char array to LPCTSTR

// el.strCap is char[50] 
// InsertItem is expecting TCHAR pointer (LPCTSTR) 
// How I can perform conversion? 
// I do not have access in both "list" and "el" source code 
// Hence, there is no way for me to modify their signature. 
list.InsertItem(i, el.strCap); 

И Нет, я не хочу использовать

WideCharToMultiByte 

Они слишком громоздки для использования.

ответ

3

Если вы используете ATL, то вы можете использовать various macros and helper classes, что он включает в себя, чтобы сделать преобразование:

char *test = "Hello World"; 
CA2CT ct(test); 
list.InsertItem(i, ct); 

Хотя говорят WideCharToMultiByte слишком громоздким немного disingenious, на мой взгляд. Достаточно просто обернуть вызов WideCharToMultiByte и вернуть ему std :: wstring или что вам нужно. На самом деле, это в основном то, что CA2CT делает под одеялом ...

1

Если строка вашего характера кодируется как ISO-8859-1, легко преобразовать в UTF-16:

// Convert an ISO-8859-1 string to a UTF-16 string 
wchar_t wstr[50]; 
for (int i = 0; i < 50; ++i) 
{ 
    wstr[i] = el.strCap[i]; 
    if (!wstr[i]) 
     break; 
} 

Но если ваши данные - это что-то другое, кроме ISO-8859-1 (или ASCII, которое является подмножеством), тогда вам нужно будет обработать более сложное преобразование. Как только вам это нужно, вы обнаружите, что MultiByteToWideChar не является громоздким по сравнению.

1

Вы также можете использовать CStringW i.e. list.InsertItem(i, CStringW("blah"));