Здравствуйте Clover, вы писали:
C>Кстати, о Рихтере. Не могу откомпилировать примеры с компакт-диска 4-го издания. Подскажите, люди добрые, научите уму-разуму.
А ридонли с файлов сняли?
И что значит "не могу откомпилировать"? Подробнее, плиз....
При попытке откомпилировать любой из примеров выдается несколько ошибок:undeclared identifier, cannot convert,syntax error и т.д. Так-же ругается файл с определенными Рихтером макросами "cmnhdr.h". Напр. пишет : "You are not using the latest Platform SDK header/library files. This may prevent the project from building correctly" Хотя у меня шестая VC на NT4.0
Быть может нужно поменять параметры setting или закоменнтировать какие-нибудь строки в "cmnhdr.h"?
Здравствуйте Clover, вы писали:
C> При попытке откомпилировать любой из примеров выдается несколько ошибок:undeclared identifier, cannot convert,syntax error и т.д. Так-же ругается файл с определенными Рихтером макросами "cmnhdr.h". Напр. пишет : "You are not using the latest Platform SDK header/library files. This may prevent the project from building correctly" Хотя у меня шестая VC на NT4.0 C> Быть может нужно поменять параметры setting или закоменнтировать какие-нибудь строки в "cmnhdr.h"?
Странно все это... У меня без проблем работает (VC6_Sp5 + Win2000_Sp2)
Может у вас 95? Ну или SDK старый.... То что "You are not using the latest Platform.." это действительно только НЕКОТОРЫЕ особо специфичные проги могут не работать.....
В общем, настраивать там нечего, либо у вас полтерГейтс, либо VC криво стоит.... я так думаю ;)
PS, хотите, пишите мылом, какой миенно пример не работает, постатаемся разобраться....
Здравствуйте, Clover, Вы писали:
C>Кстати, о Рихтере. Не могу откомпилировать примеры с компакт-диска 4-го издания. Подскажите, люди добрые, научите уму-разуму.
Не могли бы выслать почтой файлы из приложений A и B?
dimchansky@mail.ru
Спасибо, Дмитрий.
Re[2]: примеры из книги Рихтера
От:
Аноним
Дата:
20.09.03 20:52
Оценка:
Здравствуйте, Димчанский, Вы писали:
Д>Здравствуйте, Clover, Вы писали:
C>>Кстати, о Рихтере. Не могу откомпилировать примеры с компакт-диска 4-го издания. Подскажите, люди добрые, научите уму-разуму.
Д>Не могли бы выслать почтой файлы из приложений A и B? Д>dimchansky@mail.ru
Д>Спасибо, Дмитрий.
Если вам прислали эти файлы, я прошу переслать их мне на svm_@mail.ru. Спасибо.
Здравствуйте, Димчанский, Вы писали:
Д>Здравствуйте, Аноним, Вы писали: А>>Если вам прислали эти файлы, я прошу переслать их мне на svm_@mail.ru. Спасибо.
Д>Неа, не прислали.
Которые файлы-то? CmnHdr.h и все или еще что-то?
Здравствуйте, Ovl, Вы писали:
Ovl>Здравствуйте, Рома Мик, Вы писали:
РМ>>Которые файлы-то? CmnHdr.h и все или еще что-то?
Ovl>а я бы не отказался от файлов из приложений A и B. Ovl>А то примеры есть, а CmnHdr.h и макросов не хватает. Кроме того там наверное ещё что-то есть...
Ovl>если не трудно, то скинь все что в приложениях есть на ovl@front.ru
В приложениях упоминается только CmnHdr.h. Файл windowsx.h есть в Platorm SDK и поставляется вместе с Visual C++.
/******************************************************************************
Module: CmnHdr.h
Notices: Copyright (c) 2000 Jeffrey Richter
Purpose: Common header file containing handy macros and definitions
used throughout all the applications in the book.
See Appendix A.
******************************************************************************/#pragma once // Include this header file once per compilation unit
//////////////////////// Windows Version Build Option /////////////////////////#define _WIN32_WINNT 0x0500
//#define WINVER 0x0500
//////////////////////////// Unicode Build Option /////////////////////////////
// If we are not compiling for an x86 CPU, we always compile using Unicode.#ifndef _M_IX86
#define UNICODE
#endif// To compile using Unicode on the x86 CPU, uncomment the line below.
//#define UNICODE
// When using Unicode Windows functions, use Unicode C-Runtime functions too.#ifdef UNICODE
#define _UNICODE
#endif///////////////////////// Include Windows Definitions /////////////////////////#pragma warning(push, 3)
#include <Windows.h>
#pragma warning(pop)
#pragma warning(push, 4)
///////////// Verify that the proper header files are being used //////////////#ifndef WT_EXECUTEINPERSISTENTIOTHREAD
#pragma message("You are not using the latest Platform SDK header/library ")
#pragma message("files. This may prevent the project from building correctly.")
#endif////////////// Allow code to compile cleanly at warning level 4 ///////////////
/* nonstandard extension 'single line comment' was used */#pragma warning(disable:4001)
// unreferenced formal parameter#pragma warning(disable:4100)
// Note: Creating precompiled header #pragma warning(disable:4699)
// function not inlined#pragma warning(disable:4710)
// unreferenced inline function has been removed#pragma warning(disable:4514)
// assignment operator could not be generated#pragma warning(disable:4512)
///////////////////////// Pragma message helper macro /////////////////////////
/*
When the compiler sees a line like this:
#pragma chMSG(Fix this later)
it outputs a line like this:
c:\CD\CmnHdr.h(82):Fix this later
You can easily jump directly to this line and examine the surrounding code.
*/#define chSTR2(x) #x
#define chSTR(x) chSTR2(x)
#define chMSG(desc) message(__FILE__ "(" chSTR(__LINE__) "):" #desc)
////////////////////////////// chINRANGE Macro ////////////////////////////////
// This macro returns TRUE if a number is between two others#define chINRANGE(low, Num, High) (((low) <= (Num)) && ((Num) <= (High)))
//////////////////////////////// chDIMOF Macro ////////////////////////////////
// This macro evaluates to the number of elements in an array. #define chDIMOF(Array) (sizeof(Array) / sizeof(Array[0]))
///////////////////////////// chBEGINTHREADEX Macro ///////////////////////////
// This macro function calls the C runtime's _beginthreadex function.
// The C runtime library doesn't want to have any reliance on Windows' data
// types such as HANDLE. This means that a Windows programmer needs to cast
// values when using _beginthreadex. Since this is terribly inconvenient,
// I created this macro to perform the casting.typedef unsigned (__stdcall *PTHREAD_START) (void *);
#define chBEGINTHREADEX(psa, cbStack, pfnStartAddr, \
pvParam, fdwCreate, pdwThreadId) \
((HANDLE)_beginthreadex( \
(void *) (psa), \
(unsigned) (cbStack), \
(PTHREAD_START) (pfnStartAddr), \
(void *) (pvParam), \
(unsigned) (fdwCreate), \
(unsigned *) (pdwThreadId)))
////////////////// DebugBreak Improvement for x86 platforms ///////////////////#ifdef _X86_
#define DebugBreak() _asm { int 3 }
#endif/////////////////////////// Software Exception Macro //////////////////////////
// Useful macro for creating your own software exception codes#define MAKESOFTWAREEXCEPTION(Severity, Facility, Exception) \
((DWORD) ( \
/* Severity code */ (Severity ) | \
/* MS(0) or Cust(1) */ (1 << 29) | \
/* Reserved(0) */ (0 << 28) | \
/* Facility code */ (Facility << 16) | \
/* Exception code */ (Exception << 0)))
/////////////////////////// Quick MessageBox Macro ////////////////////////////inline void chMB(PCSTR s) {
char szTMP[128];
GetModuleFileNameA(NULL, szTMP, chDIMOF(szTMP));
MessageBoxA(GetActiveWindow(), s, szTMP, MB_OK);
}
//////////////////////////// Assert/Verify Macros /////////////////////////////inline void chFAIL(PSTR szMsg) {
chMB(szMsg);
DebugBreak();
}
// Put up an assertion failure message box.inline void chASSERTFAIL(LPCSTR file, int line, PCSTR expr) {
char sz[128];
wsprintfA(sz, "File %s, line %d : %s", file, line, expr);
chFAIL(sz);
}
// Put up a message box if an assertion fails in a debug build.#ifdef _DEBUG
#define chASSERT(x) if (!(x)) chASSERTFAIL(__FILE__, __LINE__, #x)
#else
#define chASSERT(x)
#endif// Assert in debug builds, but don't remove the code in retail builds.#ifdef _DEBUG
#define chVERIFY(x) chASSERT(x)
#else
#define chVERIFY(x) (x)
#endif/////////////////////////// chHANDLE_DLGMSG Macro /////////////////////////////
// The normal HANDLE_MSG macro in WindowsX.h does not work properly for dialog
// boxes because DlgProc return a BOOL instead of an LRESULT (like
// WndProcs). This chHANDLE_DLGMSG macro corrects the problem:#define chHANDLE_DLGMSG(hwnd, message, fn) \
case (message): return (SetDlgMsgResult(hwnd, uMsg, \
HANDLE_##message((hwnd), (wParam), (lParam), (fn))))
//////////////////////// Dialog Box Icon Setting Macro ////////////////////////
// Sets the dialog box iconsinline void chSETDLGICONS(HWND hwnd, int idi) {
SendMessage(hwnd, WM_SETICON, TRUE, (LPARAM)
LoadIcon((HINSTANCE) GetWindowLongPtr(hwnd, GWLP_HINSTANCE),
MAKEINTRESOURCE(idi)));
SendMessage(hwnd, WM_SETICON, FALSE, (LPARAM)
LoadIcon((HINSTANCE) GetWindowLongPtr(hwnd, GWLP_HINSTANCE),
MAKEINTRESOURCE(idi)));
}
/////////////////////////// OS Version Check Macros ///////////////////////////inline void chWindows9xNotAllowed() {
OSVERSIONINFO vi = { sizeof(vi) };
GetVersionEx(&vi);
if (vi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
chMB("This application requires features not present in Windows 9x.");
ExitProcess(0);
}
}
inline void chWindows2000Required() {
OSVERSIONINFO vi = { sizeof(vi) };
GetVersionEx(&vi);
if ((vi.dwPlatformId != VER_PLATFORM_WIN32_NT) && (vi.dwMajorVersion < 5)) {
chMB("This application requires features present in Windows 2000.");
ExitProcess(0);
}
}
///////////////////////////// UNICODE Check Macro /////////////////////////////
// Since Windows 98 does not support Unicode, issue an error and terminate
// the process if this is a native Unicode build running on Windows 98
// This is accomplished by creating a global C++ object. Its constructor is
// executed before WinMain.#ifdef UNICODE
class CUnicodeSupported {
public:
CUnicodeSupported() {
if (GetWindowsDirectoryW(NULL, 0) <= 0) {
chMB("This application requires an OS that supports Unicode.");
ExitProcess(0);
}
}
};
// "static" stops the linker from complaining that multiple instances of the
// object exist when a single project contains multiple source files.static CUnicodeSupported g_UnicodeSupported;
#endif/////////////////////////// Force Windows subsystem ///////////////////////////#pragma comment(linker, "/subsystem:Windows")
///////////////////////////////// End of File /////////////////////////////////