Parcan

|
Posted: Mon Feb 21, 2005 00:53 Post subject: |
|
|
ПРИМЕР1: вот пример код нерабочий после оптимизации и код рабочий после оптимизации
//неработает
int TAce::
AnalyzeArcHead(ACE_BLOCK_HEAD& head)
{
WORD HEAD_SIZE = 0;
//...
HEAD_SIZE = TakeWord(head.HEAD_SIZE1, head.HEAD_SIZE2);
//...
m_loffset = HEAD_SIZE + 4;
//...
}
//гдето вызов
m_MSG = AnalyzeArcHead(m_BLOCK_HEAD);
посмтотрел через MessageBox() head.HEAD_SIZE1 и head.HEAD_SIZE2 равны 0, хотя m_BLOCK_HEAD.HEAD_SIZE1 и m_BLOCK_HEAD.HEAD_SIZE2 имеют значения, в итоге m_loffset = 0 + 4 = 4
//работает
int TAce::
AnalyzeArcHead(ACE_BLOCK_HEAD& head)
{
WORD HEAD_SIZE = 0;
//...
//начало ненужной вставки
char BufStr[MAX_LOADSTRING];
sprintf(BufStr, "%d\n%d", head.HEAD_SIZE1, head.HEAD_SIZE2);
//конец ненужной вставки
HEAD_SIZE = TakeWord(head.HEAD_SIZE1, head.HEAD_SIZE2);
//...
m_loffset = HEAD_SIZE + 4;
//...
}
//гдето вызов
m_MSG = AnalyzeArcHead(m_BLOCK_HEAD);
опять компилирую с оптимизацией, опа в head.HEAD_SIZE1 и head.HEAD_SIZE2 находятся нужные мне значения
мое мнение, что в первом случае нужные мне значения оказались только в регистрах процессора, а не в нужной мне структуре (после чтения из файла), во втором случае компилятор всетаки решил записать значения в мою структуру... КАКИЕ БУДУТ МЫСЛИ?
ПРИМЕР2
//при запуске плагина
HFONT hFontB = ::CreateFont(12, 0, 0, 0, FW_BOLD, FALSE, FALSE,
FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_ROMAN, "MS Sans Serif");
HFONT hFontN = ::CreateFont(12, 0, 0, 0, FW_NORMAL, FALSE, FALSE,
FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_ROMAN, "MS Sans Serif");
HFONT hFontS = ::CreateFont(24, 0, 0, 0, FW_BOLD, FALSE, TRUE,
FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_ROMAN, "MS Sans Serif");
//при завершении работы
if (hFontB) { ::DeleteObject(hFontB); hFontB = 0; }
if (hFontN) { ::DeleteObject(hFontN); hFontN = 0; }
if (hFontS) { ::DeleteObject(hFontS); hFontS = 0; }
в MSDN написано либо будет создан шрифт, либо вернется NULL, соответственно я полагаю, что тут все должно отрабатывать корректно, вылавливал ошибку на участке удаления шрифтов...
все что я создаю в динамической памяти я инициализирую и даже на всякий случай удаляю в обратном порядке создания, проверил уже ну все, все что я делаю сам через new-delete проверил на 100%...
НЕДОУМЕНИЕ
и последнее есть у кого-нибудь предположение как возникновение ошибок может быть связано с путем файла и его именем, ведь как я уже говорил, что когда я находил такие ситуации я копировал или переименовывал файл и никаких ошибок на копии или переименованном оригинале не проявлялось, но на самом файле оригинале(непереименованном) возникают 100%. Все это проверялось только на Win98SE, на работе проверить все никак нет времени.
Ipse
ну незнаю сколько на си пишу а со строками всегда проблемы решаемы, поскольку покрайней мере на моей практике, ошибка со строками либо вылезает еще в дебаг версии, либо при первом запуске релиз версии.
Dest
RegisterHotKey, по тексту MSDN мне показалось, что хоткей будет срабатывать всегда независимо от текущего фокуса, хотя я в английском слаб могу и ошибатся, а как перехватывать сообщения хоть наметку дай, если будет время то меня не ломает поразбиратся, я вообще думал что на WinAPI писать легче, а когда попробовал (это впервый раз) аж офигел вспомнилось как на 1-2 курсах ассемблер изучали. |
|