Вопрос начинающего
От: Аноним  
Дата: 07.09.01 22:02
Оценка:
Всем доброго здоровья!
Знакомлюсь с МС++ 6.0. Разбираю пример — "Hello, world!":

#include <windows.h>
//#include <mmsystem.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "HelloWin" ;
HWND hwnd ;
MSG msg ;
WNDCLASSEX wndclass ;

wndclass.cbSize = sizeof (wndclass) ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;

RegisterClassEx (&wndclass) ;

hwnd = CreateWindow (szAppName, // window class name
"The Hello Program", // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters

ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;

switch (iMsg)
{
case WM_CREATE :
PlaySound ("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC) ;
//MessageBox (NULL, "Here we are...", "at the beginnin'", MB_OK);
return 0 ;

case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;

GetClientRect (hwnd, &rect) ;

DrawText (hdc, "Hello, Windows 98!", -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

EndPaint (hwnd, &ps) ;
return 0 ;

case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}

return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}

При линковке дает ошибку:
Hellowin.obj : error LNK2001: unresolved external symbol __imp__PlaySoundA@12

Что не так?

Спасибо.
Re: Вопрос начинающего
От: Alex Fedotov США  
Дата: 07.09.01 22:07
Оценка:
Здравствуйте Аноним, вы писали:

А>Всем доброго здоровья!

А>Знакомлюсь с МС++ 6.0. Разбираю пример — "Hello, world!":

А>[...]


А>При линковке дает ошибку:

А>Hellowin.obj : error LNK2001: unresolved external symbol __imp__PlaySoundA@12

А>Что не так?


С этой проблемой мы боремся следующим образом:

1. Открываем справочную статью PlaySound в MSDN
2. Смотрим в самый низ страницы, где написано Library: Use Winmm.lib.
3. Открываем Project settings, Link tab.
4. Добавляем Winmm.lib к списку библиотек
5. Компилируем, запускаем и наслаждаемся.
-- Alex Fedotov
Re: Вопрос начинающего
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 07.09.01 22:20
Оценка:
Здравствуйте Аноним, вы писали:

А>Всем доброго здоровья!

А>Знакомлюсь с МС++ 6.0. Разбираю пример — "Hello, world!":

А>#include <windows.h>

А>//#include <mmsystem.h>
А>...
А>...
А>При линковке дает ошибку:
А>Hellowin.obj : error LNK2001: unresolved external symbol __imp__PlaySoundA@12

А>Что не так?



#include <mmsystem.h>

и winmm.lib надо прилинковать
Re[2]: Вопрос начинающего
От: Xigen  
Дата: 08.09.01 02:07
Оценка:
AF>С этой проблемой мы боремся следующим образом:

AF>1. Открываем справочную статью PlaySound в MSDN

AF>2. Смотрим в самый низ страницы, где написано Library: Use Winmm.lib.
AF>3. Открываем Project settings, Link tab.
AF>4. Добавляем Winmm.lib к списку библиотек
AF>5. Компилируем, запускаем и наслаждаемся.

Спасибо за ответы. Все ОК.
Интересен другой факт. Размер получившегося ехе ~152 Kb,
при том что к примеру прилагается "родной" ехе, в чем созданный, не знаю,
размером ~16,5 Kb.
Чем можно объяснить разницу?

Спасибо.
Re[3]: Вопрос начинающего
От: Alex Fedotov США  
Дата: 08.09.01 02:21
Оценка:
Здравствуйте Xigen, вы писали:

X>Интересен другой факт. Размер получившегося ехе ~152 Kb,

X>при том что к примеру прилагается "родной" ехе, в чем созданный, не знаю,
X>размером ~16,5 Kb.
X>Чем можно объяснить разницу?

Надо обратить внимание на:

1. Build configuration. Должно быть выбрано Win32 Release.
2. Project Settings -> Link. Руками добавить опцию /opt:nowin98
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.