代码为什么错了?

redandblue 2001-02-06 10:37:00
//*******************************************************************

// 工程:hello

// 文件:hello.cpp

// 内容:创建第一个DirectDraw应用程序,

//*******************************************************************

 

#include <windows.h>

#include <windowsx.h>

#include <ddraw.h>

 

LPDIRECTDRAW lpDD; // DirectDraw对象

LPDIRECTDRAWSURFACE lpDDSPrimary; // DirectDraw主页面

char szMsg1[] = "Hello World, I am DirectDraw boy !";

char szMsg2[] = "按 ESC 退出";

 

//函数声明

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );

BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );

BOOL InitDDraw( void );

void FreeDDraw( void );

 

//*******************************************************************

//函数:WinMain()

//功能:Win32应用程序入口函数。进行初始化工作,处理消息循环

//*******************************************************************

int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPSTR lpCmdLine, int nCmdShow)

{

MSG msg;



//初始化主窗口

if ( !InitWindow( hInstance, nCmdShow ) )

return FALSE;

 

//初始化DirectDraw环境,并实现DirectDraw功能

if ( !InitDDraw())

{

MessageBox(GetActiveWindow(), "初始化DirectDraw过程中出错!", "Error", MB_OK );

FreeDDraw();

DestroyWindow(GetActiveWindow());

return FALSE;

}



//进入消息循环

while (GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}



return msg.wParam;

}

 

//******************************************************************

//函数:InitWindow()

//功能:创建主窗口。

//******************************************************************

static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )

{

HWND hwnd; //窗口句柄

WNDCLASS wc; //窗口类结构



//填充窗口类结构

wc.style = 0;

wc.lpfnWndProc = WinProc;

wc.cbClsExtra = 0;

wc.cbWndExtra = 0;

wc.hInstance = hInstance;

wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );

wc.hCursor = LoadCursor( NULL, IDC_ARROW );

wc.hbrBackground = GetStockObject(BLACK_BRUSH);

wc.lpszMenuName = NULL;

wc.lpszClassName = "dxHello";

 

//注册窗口类

RegisterClass( &wc );



//创建主窗口

hwnd = CreateWindowEx(

0,

"dxHello",

"",

WS_POPUP,

0, 0,

GetSystemMetrics( SM_CXSCREEN ),

GetSystemMetrics( SM_CYSCREEN ),

NULL,

NULL,

hInstance,

NULL );



if( !hwnd ) return FALSE;

//显示并更新窗口

ShowWindow( hwnd, nCmdShow );

UpdateWindow( hwnd );

return TRUE;

}



//******************************************************************

//函数:WinProc()

//功能:处理主窗口消息

//******************************************************************

LRESULT CALLBACK WinProc( HWND hWnd, UINT message,

WPARAM wParam, LPARAM lParam )

{

switch( message )

{

case WM_KEYDOWN://击键消息

switch( wParam )

{

case VK_ESCAPE:

PostMessage(hWnd, WM_CLOSE, 0, 0);

break;

}

break;

case WM_DESTROY://退出消息

FreeDDraw();

PostQuitMessage( 0 );

break;

}

 

//调用缺省消息处理过程

return DefWindowProc(hWnd, message, wParam, lParam);

}

 

//******************************************************************

//函数:InitDDraw()

//功能:初始化DirectDraw环境并实现其功能。包括:创建DirectDraw对象,

// 设置显示模式,创建主页面,输出文字。

//******************************************************************

BOOL InitDDraw(void)

{

DDSURFACEDESC ddsd; //页面描述

HDC hdc; //设备环境句柄

 

//创建DirectCraw对象

if ( DirectDrawCreate( NULL, &lpDD, NULL ) != DD_OK ) return FALSE;

 

// 取得独占和全屏模式

if ( lpDD->SetCooperativeLevel( GetActiveWindow(),

DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN ) != DD_OK)

return FALSE;



//设置显示模式

if ( lpDD->SetDisplayMode( 640, 480, 8 ) != DD_OK) return FALSE;



//填充主页面信息

ddsd.dwSize = sizeof( ddsd );

ddsd.dwFlags = DDSD_CAPS;

ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;



//创建主页面对象

if ( lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL ) != DD_OK)

return FALSE;



//输出文字

if ( lpDDSPrimary->GetDC(&hdc) != DD_OK) return FALSE;



SetBkColor( hdc, RGB( 0, 0, 255 ) );

SetTextColor( hdc, RGB( 255, 255, 0 ) );

TextOut( hdc, 220, 200, szMsg1, lstrlen(szMsg1));

TextOut( hdc, 280, 240, szMsg2, lstrlen(szMsg2));

lpDDSPrimary->ReleaseDC(hdc);

return TRUE;

}

 

//******************************************************************

//函数:FreeDDraw()

//功能:释放所有的DirectDraw对象。

//******************************************************************

void FreeDDraw( void )

{

if( lpDD != NULL )

{

if( lpDDSPrimary != NULL )

{

lpDDSPrimary->Release();

lpDDSPrimary = NULL;

}

lpDD->Release();

lpDD = NULL;

}

}
用vc编,出现:
--------------------Configuration: hello - Win32 Debug--------------------
Compiling...
hello.cpp
d:\msdev98\myprojects\hello\hello.cpp(11) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(11) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(19) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(19) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(29) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(29) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(41) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(41) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(67) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(67) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(105) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(105) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(141) : error C2440: '=' : cannot convert from 'void *' to 'struct HBRUSH__ *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
d:\msdev98\myprojects\hello\hello.cpp(147) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(147) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(241) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(241) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(249) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(249) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(269) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(269) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(275) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(275) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(331) : error C2018: unknown character '0xa1'
d:\msdev98\myprojects\hello\hello.cpp(331) : error C2018: unknown character '0xa1'
Error executing cl.exe.

hello.exe - 25 error(s), 0 warning(s)
为什么错了?


...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
laozhongcheng 2001-02-11
  • 打赏
  • 举报
回复
请你以后输入代码时关闭中文输入法,你输入了一大堆全角空格,虽然看不见,但是
编译器认为是非法字符,所以产生错误。编辑器有一个特点,按end键光标移动到行末时,如果
行末没有特殊字符,它的光标就会在最后一个可见字符之后,这就意味着如果是空行的话,光标
就会在最左边的位置,否则就是含有不可见的特殊字符。比较容易就可以看出特殊字符的存在。

下面将正确代码附上:

//*******************************************************************
// 工程:hello
// 文件:hello.cpp
// 内容:创建第一个DirectDraw应用程序,
//*******************************************************************

#include <condefs.h>
#include <windows.h>
#include <windowsx.h>
#include <ddraw.h>

#pragma hdrstop
#pragma argsused

LPDIRECTDRAW lpDD; // DirectDraw对象
LPDIRECTDRAWSURFACE lpDDSPrimary; // DirectDraw主页面
char szMsg1[] = "Hello World, I am DirectDraw boy !";
char szMsg2[] = "按 ESC 退出";

//函数声明
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );
BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );
BOOL InitDDraw( void );
void FreeDDraw( void );

//*******************************************************************
//函数:WinMain()
//功能:Win32应用程序入口函数。进行初始化工作,处理消息循环
//*******************************************************************
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;

//初始化主窗口
if ( !InitWindow( hInstance, nCmdShow ) )
return FALSE;

//初始化DirectDraw环境,并实现DirectDraw功能
if ( !InitDDraw())
{
MessageBox(GetActiveWindow(), "初始化DirectDraw过程中出错!", "Error", MB_OK );
FreeDDraw();
DestroyWindow(GetActiveWindow());
return FALSE;
}

//进入消息循环
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

//******************************************************************
//函数:InitWindow()
//功能:创建主窗口。
//******************************************************************
static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )
{
HWND hwnd; //窗口句柄
WNDCLASS wc; //窗口类结构

//填充窗口类结构
wc.style = 0;
wc.lpfnWndProc = WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = GetStockObject(BLACK_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = "dxHello";

//注册窗口类
RegisterClass( &wc );

//创建主窗口
hwnd = CreateWindowEx( 0, "dxHello", "", WS_POPUP, 0, 0,
GetSystemMetrics( SM_CXSCREEN ),
GetSystemMetrics( SM_CYSCREEN ),
NULL,
NULL,
hInstance,
NULL );

if( !hwnd ) return FALSE;

//显示并更新窗口
ShowWindow( hwnd, nCmdShow );
UpdateWindow( hwnd );
return TRUE;
}

//******************************************************************
//函数:WinProc()
//功能:处理主窗口消息
//******************************************************************
LRESULT CALLBACK WinProc( HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_KEYDOWN://击键消息
{
switch( wParam )
{
case VK_ESCAPE:
PostMessage(hWnd, WM_CLOSE, 0, 0);
break;
}
}
break;

case WM_DESTROY://退出消息
{
FreeDDraw();
PostQuitMessage( 0 );
}
break;
}

//调用缺省消息处理过程
return DefWindowProc(hWnd, message, wParam, lParam);
}

//******************************************************************
//函数:InitDDraw()
//功能:初始化DirectDraw环境并实现其功能。包括:创建DirectDraw对象,
// 设置显示模式,创建主页面,输出文字。
//******************************************************************
BOOL InitDDraw(void)
{
DDSURFACEDESC ddsd; //页面描述
HDC hdc; //设备环境句柄

//创建DirectCraw对象
if ( DirectDrawCreate( NULL, &lpDD, NULL ) != DD_OK ) return FALSE;

// 取得独占和全屏模式
if ( lpDD->SetCooperativeLevel( GetActiveWindow(),
DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN ) != DD_OK) return FALSE;

//设置显示模式
if ( lpDD->SetDisplayMode( 640, 480, 8 ) != DD_OK) return FALSE;

//填充主页面信息
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;

//创建主页面对象
if ( lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL ) != DD_OK)
return FALSE;

//输出文字
if ( lpDDSPrimary->GetDC(&hdc) != DD_OK) return FALSE;

SetBkColor( hdc, RGB( 0, 0, 255 ) );
SetTextColor( hdc, RGB( 255, 255, 0 ) );
TextOut( hdc, 220, 200, szMsg1, lstrlen(szMsg1));
TextOut( hdc, 280, 240, szMsg2, lstrlen(szMsg2));
lpDDSPrimary->ReleaseDC(hdc);
return TRUE;
}

//******************************************************************
//函数:FreeDDraw()
//功能:释放所有的DirectDraw对象。
//******************************************************************
void FreeDDraw( void )
{
if( lpDD != NULL )
{
if( lpDDSPrimary != NULL )
{
lpDDSPrimary->Release();
lpDDSPrimary = NULL;
}

lpDD->Release();
lpDD = NULL;
}
}
随风bj 2001-02-07
  • 打赏
  • 举报
回复
呵呵,仔细检查一下你的代码,其中肯定用了VC的非法字符,比如把英文的逗号写成了中文的逗号等

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧