Несмотря на то, что таких случаев много, и я их искал, ни один из них мне никак не помог. Приведенный ниже код отлично работает при отладке, но в режиме выпуска он дает сбой или возвращает искаженные строки, если это не так. Все оптимизации для режима выпуска отключены, но результата нет. Анализ кода Visual Studio ничего не нашел. Если это что-то вроде памяти / буфера, то сейчас это у меня над головой.
case LBN_SELCHANGE:
//===========================================================================
//Trying to fill the edit boxes with data fetched from DB
//===========================================================================
{
string s;
wstring str;
int y;
int ind = SendMessage(GetDlgItem(hwnd, IDC_lbList), LB_GETCURSEL, 0, 0);
int index = SendMessage(GetDlgItem(hwnd, IDC_lbList), LB_GETITEMDATA, (WPARAM)ind, 0);
string sint = boost::lexical_cast<std::string>(index);
string smt = "SELECT `ID`, `client`, `telnr`, `atnrem`, `papatn`, `gedapr` FROM `tremreg` WHERE `ID` = ";
string query = smt + sint;
res = stmt->executeQuery(query.c_str());
while (res->next())
{
for (int i = 1; i <= g_iFieldCount + 1; i++)
{
if (i == 1)
{
y = res->getInt(i);
SetDlgItemInt(hwnd, IDC_eRemID, y, FALSE);
}
else
{
s = res->getString(i);
str = s2ws(s);
SetDlgItemText(hwnd, 1000 + (i - 1), str.c_str());
}
}
}
delete res;
}
break;
Кажется, что-то идет ужасно неправильно при извлечении строк в режиме выпуска. Они наполнены ... чем-то. Поскольку первые 4 места в строке заполнены нечетными символами и нулевыми ограничителями. Вот скриншот.
И когда я конвертирую его в wstring str
, все, что остается, - это char[0]
.
string smt = "SELECT ...
- person KonstantinL   schedule 05.06.2014