Сейчас на форуме: asfa, _MBK_, Rio (+6 невидимых)

 eXeL@B —› Вопросы новичков —› запуск примеров программ из книги "Рихтер. Windows для профессионалов" на Visual Studio 20
Посл.ответ Сообщение

Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 25 февраля 2009 23:51 · Поправил: happy_horror2
· Личное сообщение · #1

(студия 2005! в названии просто не уместилось)


Привет всем, кто читает этот пост.

Возможно вас удивит почему я взялся за книгу для профессионалов, скажу сразу - порекоммендовали на русском сайте по msdn (а именно хочу познакомиться с программированием на API)


Проблема такова, что пример первой же программы из той книги староват... моя visual studio 2005 конечно конвертировала его в формат своих проектов, но часть информации похоже утерялась (пришлось качать в интернете фаил CmnHdr.h)


программа-пример запустилась, но не работает (не показывает текстовое описание ошибки по её коду)



просьба: решить проблему её не работоспособности

буду так же благодарен если подскажите более щедящий метод конвертации примеров буду очень признателен




P.S. программу-пример исходник и её конвертированный вариант для VS 2005 залил на хостинги, т.к. на форум столько не влезит

--> исходник Рихтера <--(~3.5 МБ) http://dump.ru/file/1913681
--> та же программа, но конвертированная и дополненная фаилом CmnHdr.h <-- (~1.7 МБ) http://dump.ru/file/1913693

P.S.2 CmnHdr.h это только хеадер фаила, а саму библиотеку-то к нему качать надо было?)) (студия вроде не просила...)




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 26 февраля 2009 14:02
· Личное сообщение · #2

программа-пример запустилась, но не работает (не показывает текстовое описание ошибки по её коду)

смотря какой код ошибки ты вводишь

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 26 февраля 2009 16:39 · Поправил: happy_horror2
· Личное сообщение · #3

пытался вводить 100, 101, 1000, 1001, 6001, 6002... цифры от 1 до 9

а никакого результата не показывается...




числа брал в принципи не с потолка, а нашёл их в фаилах ресорсов примера Рихтера

поражает ещё тот факт, что конвертированная прога весит в 2 раза меньше О_О




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 26 февраля 2009 17:49
· Личное сообщение · #4

P.S.2 CmnHdr.h это только хеадер фаила, а саму библиотеку-то к нему качать надо было?)) (студия вроде не просила...)

В нем реализация и заложена

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 26 февраля 2009 17:56
· Личное сообщение · #5

--> та же программа, но конвертированная и дополненная фаилом CmnHdr.h <-- (~1.7 МБ)

ниче тут нет

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 13.7 (новичок)
Активность: 0.020
Статус: Участник

Создано: 26 февраля 2009 18:17
· Личное сообщение · #6

Чё смеётесь? Имея исходники можно и самому проект из них слепить. Причем тут конвертация? Из старых в новые студия корректно конвертирует. Матчасть учить.



Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 26 февраля 2009 18:45 · Поправил: happy_horror2
· Личное сообщение · #7

coderess пишет:
ниче тут нет


там архив On VS 2005.rar (только что скачал сам - он там есть)

на счёт фаила CmnHdr.h: если бы не было, то при билде или запуске по Ctrl+F5 студия бы написала, что фаил CmnHdr.h не найден... (по крайней мере я добавил его к исходикам)



XoDeR пишет:
Чё смеётесь? Имея исходники можно и самому проект из них слепить. Причем тут конвертация? Из старых в новые студия корректно конвертирует. Матчасть учить.


по вашему добрый дядька Рихтер написал нерабочие примеры? ^_^... я конечно обратное уверждать не берусь, ибо его примеры в чистом виде мне не начем запускать




посмотрел код, изменил выводимую строку, вроде всё логично, вот главный кусок из ShowError.cpp

Code:
  1. void Dlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) {
  2.    switch (id) {
  3.    case IDCANCEL:
  4.       EndDialog(hwnd, id);
  5.       break;
  6.    case IDC_ALWAYSONTOP:
  7.       SetWindowPos(hwnd, IsDlgButtonChecked(hwnd, IDC_ALWAYSONTOP) 
  8.          ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
  9.       break;
  10.    case IDC_ERRORCODE: 
  11.       EnableWindow(GetDlgItem(hwnd, IDOK), Edit_GetTextLength(hwndCtl) > 0);
  12.       break;
  13.    case IDOK:
  14.       // Get the error code
  15.       DWORD dwError = GetDlgItemInt(hwnd, IDC_ERRORCODE, NULL, FALSE);
  16.       HLOCAL hlocal = NULL; // Buffer that gets the error message string
  17.       // Get the error code's textual description
  18.       BOOL fOk = FormatMessage(
  19.          FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, 
  20.          NULL, dwError, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), 
  21.          (PTSTR) &hlocal, 0, NULL);
  22.       if (!fOk) {
  23.          // Is it a network-related error?
  24.          HMODULE hDll = LoadLibraryEx(TEXT("netmsg.dll"), NULL, 
  25.             DONT_RESOLVE_DLL_REFERENCES);
  26.          if (hDll != NULL) {
  27.             FormatMessage(
  28.                FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM,
  29.                hDll, dwError, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
  30.                (PTSTR) &hlocal, 0, NULL);
  31.             FreeLibrary(hDll);
  32.          }
  33.       }
  34.       if (hlocal != NULL) {
  35.          SetDlgItemText(hwnd, IDC_ERRORTEXT, (PCTSTR) LocalLock(hlocal));
  36.          LocalFree(hlocal);
  37.       } else {
  38.                    SetDlgItemText(hwnd, IDC_ERRORTEXT, TEXT("описание ошибки? ЩАС!"));
  39.       }
  40.       break;
  41.    }
  42. }


как видно, вывод сообщения происходит в последнем if-e, причём условие всегда выполянется по else

Code:
  1. if (hlocal != NULL) {
  2.          SetDlgItemText(hwnd, IDC_ERRORTEXT, (PCTSTR) LocalLock(hlocal));
  3.          LocalFree(hlocal);
  4.       } else {
  5.                    SetDlgItemText(hwnd, IDC_ERRORTEXT, TEXT("описание ошибки? ЩАС!"));
  6.       }


а посему нужна помощь в разборе кода, что есть "hlocal"??


P.S. т.к. в книге Рихтер пишет, что коды ошибок находятся в WinError.h, то я её включил в начале кода
Code:
  1. #include "WinError.h"


но текст ошибки как не показывался, так и не показывается


 eXeL@B —› Вопросы новичков —› запуск примеров программ из книги "Рихтер. Windows для профессионалов" на Visual Studio 20
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати