Форум программистов, компьютерный форум CyberForum.ru

Не компилируется программа из книги - C++

Восстановить пароль Регистрация
 
ledkets
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 25
22.06.2010, 20:46     Не компилируется программа из книги #1
Переписал из книги первую простейшую программу для Win32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
a simple message box
#define WIN32_LEAN_AND_MEAN 
 
#include <windows.h>        // the main windows headers 
#include <windowsx.h>       // a lot of cool macros
 
// main entry point for all windows programs
int WINAPI WinMain(HINSTANCE hinstance,
                   HINSTANCE hprevinstance,
                   LPSTR lpcmdline,
                   int ncmdshow)
{
// call message box api with NULL for parent window handle
MessageBox(NULL, "THERE CAN BE ONLY ONE!!!", "dsgdg", MB_OK || MB_ICONEXCLAMATION);
 
// exit program
return(0);
 
} // end WinMain
Но при нажатии кнопки компилировать, VC++ выдает ошибку для 14-ой строки :
"Error 1 error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [25]' to 'LPCWSTR' c:\documents and settings\123\my documents\visual studio 2005\projects\windows project_1\windows project_1\1.cpp 14"
Подскажите пожалуйста, как можно это исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2010, 20:46     Не компилируется программа из книги
Посмотрите здесь:

C++ программа не компилируется
C++ не компилируется программа
Не компилируется программа C++
C++ Не компилируется программа
C++ Программа не компилируется
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
JamesBlack
 Аватар для JamesBlack
36 / 36 / 3
Регистрация: 28.07.2009
Сообщений: 144
22.06.2010, 20:52     Не компилируется программа из книги #2
VC? или VS(Visual Studio)? Какая версия? русская или английская?

Добавлено через 3 минуты
Вобщем, на русском в меню жмешь Проект -> Свойства -> Свойства конфигурации -> Набор знаков, меняешь с Unicode на мульти-байтовую кодировку.
Если английская версия: Project -> Properties -> Configuration Properties -> и вместо Unicode поставь в строке multi-byte
ledkets
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 25
22.06.2010, 21:03  [ТС]     Не компилируется программа из книги #3
(опечатался, имелось ввиду Visual Studio) Спасибо, все заработало .
ledkets
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 25
09.12.2010, 11:56  [ТС]     Не компилируется программа из книги #4
Программа из книги, использует directx.
Почему то выскакивают ошибки LNK1120 и LNK2019.
Может быть это из-за того, что я поставил VS2010, а потом VS2005, при этом не удалив предыдущую?

Текст ошибки LNK2019:
error LNK2019: unresolved external symbol _DirectDrawCreateEx@16 referenced in function "int __cdecl Game_Init(void *,int)" (?Game_Init@@YAHPAXH@Z) 7_9.obj

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
// DEMO7_1.CPP basic full-screen 16-bit color pixel plotting DirectDraw demo
 
// INCLUDES ///////////////////////////////////////////////
 
#define WIN32_LEAN_AND_MEAN  // just say no to MFC
 
#define INITGUID
 
#include <windows.h>   // include important windows stuff
#include <windowsx.h> 
#include <mmsystem.h>
#include <iostream> // include important C/C++ stuff
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h> 
#include <math.h>
#include <io.h>
#include <fcntl.h>
 
#include <ddraw.h> // include directdraw
 
// DEFINES ////////////////////////////////////////////////
 
// defines for windows 
#define WINDOW_CLASS_NAME "WINCLASS1"
 
// default screen size
#define SCREEN_WIDTH    640  // size of screen
#define SCREEN_HEIGHT   480
#define SCREEN_BPP      16    // bits per pixel
 
// TYPES //////////////////////////////////////////////////////
 
// basic unsigned types
typedef unsigned short USHORT;
typedef unsigned short WORD;
typedef unsigned char  UCHAR;
typedef unsigned char  BYTE;
 
// MACROS /////////////////////////////////////////////////
 
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
 
// this builds a 16 bit color value in 5.5.5 format (1-bit alpha mode)
#define _RGB16BIT555(r,g,b) ((b & 31) + ((g & 31) << 5) + ((r & 31) << 10))
 
// this builds a 16 bit color value in 5.6.5 format (green dominate mode)
#define _RGB16BIT565(r,g,b) ((b & 31) + ((g & 63) << 5) + ((r & 31) << 11))
 
// initializes a direct draw struct
#define DDRAW_INIT_STRUCT(ddstruct) { memset(&ddstruct,0,sizeof(ddstruct)); ddstruct.dwSize=sizeof(ddstruct); }
 
// GLOBALS ////////////////////////////////////////////////
HWND      main_window_handle = NULL; // globally track main window
HINSTANCE hinstance_app      = NULL; // globally track hinstance
 
// directdraw stuff
 
LPDIRECTDRAW7         lpdd         = NULL;   // dd object
LPDIRECTDRAWSURFACE7  lpddsprimary = NULL;   // dd primary surface
LPDIRECTDRAWSURFACE7  lpddsback    = NULL;   // dd back surface
LPDIRECTDRAWPALETTE   lpddpal      = NULL;   // a pointer to the created dd palette
LPDIRECTDRAWCLIPPER   lpddclipper  = NULL;   // dd clipper
PALETTEENTRY          palette[256];          // color palette
PALETTEENTRY          save_palette[256];     // used to save palettes
DDSURFACEDESC2        ddsd;                  // a direct draw surface description struct
DDBLTFX               ddbltfx;               // used to fill
DDSCAPS2              ddscaps;               // a direct draw surface capabilities struct
HRESULT               ddrval;                // result back from dd calls
DWORD                 start_clock_count = 0; // used for timing
 
char buffer[80];                     // general printing buffer
 
// FUNCTIONS //////////////////////////////////////////////
 
LRESULT CALLBACK WindowProc(HWND hwnd, 
                            UINT msg, 
                            WPARAM wparam, 
                            LPARAM lparam)
{
// this is the main message handler of the system
PAINTSTRUCT     ps;     // used in WM_PAINT
HDC             hdc;    // handle to a device context
char buffer[80];        // used to print strings
 
// what is the message 
switch(msg)
    {   
    case WM_CREATE: 
        {
        // do initialization stuff here
        // return success
        return(0);
        } break;
   
    case WM_PAINT: 
        {
        // simply validate the window 
        hdc = BeginPaint(hwnd,&ps);  
        
        // end painting
        EndPaint(hwnd,&ps);
 
        // return success
        return(0);
        } break;
 
    case WM_DESTROY: 
        {
 
        // kill the application, this sends a WM_QUIT message 
        PostQuitMessage(0);
 
        // return success
        return(0);
        } break;
 
    default:break;
 
    } // end switch
 
// process any messages that we didn't take care of 
return (DefWindowProc(hwnd, msg, wparam, lparam));
 
} // end WinProc
 
///////////////////////////////////////////////////////////
 
inline void Plot_Pixel_Faster16(int x, int y, 
                                int red, int green, int blue, 
                                USHORT *video_buffer, int lpitch16)
{
// this function plots a pixel in 16-bit color mode
// assuming that the caller already locked the surface
// and is sending a pointer and byte pitch to it
 
// first build up color WORD
USHORT pixel = _RGB16BIT565(red,green,blue);
 
// write the data
video_buffer[x + y*lpitch16] = pixel;
 
} // end Plot_Pixel_Faster16
 
////////////////////////////////////////////////////////////
 
int Game_Main(void *parms = NULL, int num_parms = 0)
{
// this is the main loop of the game, do all your processing
// here
 
// for now test if user is hitting ESC and send WM_CLOSE
if (KEYDOWN(VK_ESCAPE))
   SendMessage(main_window_handle,WM_CLOSE,0,0);
 
 
// plot 1000 random pixels to the primary surface and return
// clear ddsd and set size, never assume it's clean
DDRAW_INIT_STRUCT(ddsd); 
 
// lock the primary surface
if (FAILED(lpddsprimary->Lock(NULL, &ddsd,
                   DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,
                   NULL)))
   return(0);
 
// now ddsd.lPitch is valid and so is ddsd.lpSurface
 
// make a couple aliases to make code cleaner, so we don't
// have to cast
int lpitch16 = (int)(ddsd.lPitch >> 1);
USHORT *video_buffer = (USHORT *)ddsd.lpSurface;
 
// plot 1000 random pixels with random colors on the
// primary surface, they will be instantly visible
for (int index=0; index < 1000; index++)
    {
    // select random position and color for 640x480x16
    int red   = rand()%256;
    int green = rand()%256;
    int blue  = rand()%256;
    int x = rand()%640;
    int y = rand()%480;
 
    // plot the pixel
    Plot_Pixel_Faster16(x,y,red,green,blue,video_buffer,lpitch16);       
 
    } // end for index
 
 
// now unlock the primary surface
if (FAILED(lpddsprimary->Unlock(NULL)))
   return(0);
 
// return success or failure or your own return code here
return(1);
 
} // end Game_Main
 
////////////////////////////////////////////////////////////
 
int Game_Init(void *parms = NULL, int num_parms = 0)
{
// this is called once after the initial window is created and
// before the main event loop is entered, do all your initialization
// here
 
// create IDirectDraw interface 7.0 object and test for error
if (FAILED(DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)))
   return(0);
 
 
// set cooperation to full screen
if (FAILED(lpdd->SetCooperativeLevel(main_window_handle, 
                                      DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX | 
                                      DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT)))
   return(0);
 
// set display mode to 640x480x16
if (FAILED(lpdd->SetDisplayMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,0,0)))
   return(0);
 
// clear ddsd and set size
memset(&ddsd,0,sizeof(ddsd)); 
ddsd.dwSize = sizeof(ddsd);
 
// enable valid fields
ddsd.dwFlags = DDSD_CAPS;
 
// request primary surface
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
 
// create the primary surface
if (FAILED(lpdd->CreateSurface(&ddsd, &lpddsprimary, NULL)))
   return(0);
 
// return success or failure or your own return code here
return(1);
 
} // end Game_Init
 
/////////////////////////////////////////////////////////////
 
int Game_Shutdown(void *parms = NULL, int num_parms = 0)
{
// this is called after the game is exited and the main event
// loop while is exited, do all you cleanup and shutdown here
 
// now the primary surface
if (lpddsprimary)
   {
   lpddsprimary->Release();
   lpddsprimary = NULL;
   } // end if
 
// now blow away the IDirectDraw4 interface
if (lpdd)
   {
   lpdd->Release();
   lpdd = NULL;
   } // end if
 
// return success or failure or your own return code here
return(1);
 
} // end Game_Shutdown
 
// WINMAIN ////////////////////////////////////////////////
 
int WINAPI WinMain( HINSTANCE hinstance,
                    HINSTANCE hprevinstance,
                    LPSTR lpcmdline,
                    int ncmdshow)
{
 
WNDCLASSEX winclass; // this will hold the class we create
HWND       hwnd;     // generic window handle
MSG        msg;      // generic message
HDC        hdc;      // graphics device context
 
// first fill in the window class stucture
winclass.cbSize         = sizeof(WNDCLASSEX);
winclass.style          = CS_DBLCLKS | CS_OWNDC | 
                          CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc    = WindowProc;
winclass.cbClsExtra     = 0;
winclass.cbWndExtra     = 0;
winclass.hInstance      = hinstance;
winclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor        = LoadCursor(NULL, IDC_ARROW); 
winclass.hbrBackground  = (HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName   = NULL;
winclass.lpszClassName  = WINDOW_CLASS_NAME;
winclass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
 
// save hinstance in global
hinstance_app = hinstance;
 
// register the window class
if (!RegisterClassEx(&winclass))
    return(0);
 
// create the window
if (!(hwnd = CreateWindowEx(NULL,                  // extended style
                            WINDOW_CLASS_NAME,     // class
                            "DirectDraw 16-Bit Full-Screen Demo", // title
                            WS_POPUP | WS_VISIBLE,
                            0,0,      // initial x,y
                            SCREEN_WIDTH,SCREEN_HEIGHT,  // initial width, height
                            NULL,     // handle to parent 
                            NULL,     // handle to menu
                            hinstance,// instance of this application
                            NULL))) // extra creation parms
return(0);
 
// save main window handle
main_window_handle = hwnd;
 
// initialize game here
Game_Init();
 
// enter main event loop
while(TRUE)
    {
    // test if there is a message in queue, if so get it
    if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
       { 
       // test if this is a quit
       if (msg.message == WM_QUIT)
           break;
    
       // translate any accelerator keys
       TranslateMessage(&msg);
 
       // send the message to the window proc
       DispatchMessage(&msg);
       } // end if
    
       // main game processing goes here
       Game_Main();
       
    } // end while
 
// closedown game here
Game_Shutdown();
 
// return to Windows like this
return(msg.wParam);
 
} // end WinMain
 
///////////////////////////////////////////////////////////
JamesBlack
 Аватар для JamesBlack
36 / 36 / 3
Регистрация: 28.07.2009
Сообщений: 144
18.12.2010, 20:59     Не компилируется программа из книги #5
У тебя кажется проблема с подключением библиотек директикса. Загугли, посмотри, какая либа нужна для этой функции и подключи ее через Project -> Properties -> Linker -> Input -> в верхней строке впиши название нужной либы.
ledkets
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 25
20.12.2010, 18:27  [ТС]     Не компилируется программа из книги #6
Да, точно, не хватало ddraw.lib .
Yandex
Объявления
20.12.2010, 18:27     Не компилируется программа из книги
Ответ Создать тему
Опции темы

Текущее время: 16:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru