суббота, 21 января 2012 г.

string (Visual Studio)

Как оказалось, ситуация со строками удручающая не только в 2010м Builder'e, а также и в Visual Studio. В Buildere мы имеем велосипед под названием UnicodeString, в Studio же String^.
Вот линк на msdn. Там есть пример использования String.
То есть мы вынуждены приспосабливатся к очередной обертке над стандартным string.

суббота, 31 декабря 2011 г.

Если при перезагрузке слетают драйвера usb

После лечения флешки программа (предположительно) заменила родные usb драйвера на свои (ОС: Windows 7 x64). После этого я их полечил (Панель керування - Виправлення неполадок - Устаткування та звук - Обладнання та пристрої (дада, у меня винда на украинском)). Но при перезагрузке они все равно слетают.
Решение:

Откройте раздел реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000} и проверьте есть ли параметры LowerFilters и UpperFilters.
Если есть, то удалите оба параметра и перезагрузитесь. В нормальном состоянии этих параметров не должно быть.
Можно написать reg файлик, но, надеюсь, эта инфа не понадобится вам больше 1 раза :)
Успехов!

UnicodeString to char* (Embarcadero C++ Builder 2010)

Работая в 2010м билдере полностью в нем разочаровался. Список багов довольно длинный. Также обнаружилась новая "фича": метод c_str() класса UnicodeString, теперь также как и w_str() возвращает wchar_t*. Для получения char* пришлось найти другие выходы.
Итак, решение №1 (проверено):

char* wctoansi(UnicodeString us) {
wchar_t* wstr = us.c_str();
char* ascii = new char[wcslen(wstr) + 1];
wctomb(ascii, *wstr);
return ascii;
}

И решение №2 (не проверено):

char* asAnsi(wchar_t* wstr) {
char* ansi = new char[wcslen(wstr) + 1];
for (UINT i = 0; i < wcslen(wstr) / 2; i++) {
int srca = wstr[i];
if (srca >= int(L"а") && srca <= int(L"я"))
ansi[i] = int("a") + (srca -int(L"а"));
else if (srca >= int(L"А") && srca <= int(L"Я"))
ansi[i] = int("А") + (srca -int(L"А"));
else {
ansi[i] = (char)wstr[i];
if (wstr[i] == 0)
break;
}
}
return ansi;
}


Творческих успехов!