vs2010建立win32 application 编译错误(用vc6.0建立此工程正常运行)解决方法

从vc到vs,工具越来越强大,方便性不言而喻。但同时新的工具就有很多操作与旧的习惯不一样,刚学visual c++ 时就安装了vs2010,但按照老课本的建立工程方法怎么都不能顺利编译。通过各种查阅资料,终于解决问题了。

 在vc6.0里面可以直接在wizard里面建立win 32 application ,只是在最后选上空项目即可。然后添加cpp文件,编辑后直接编译就可以了。

但有一个问题是:同样可以在vc6.0里面编译的源文件,如果在vs2010里面直接编译,呵呵,你会知道什么叫做杯具。无法编译啊无法编译!

 

在vs2010 里面,你一定会按照vc6.0里那样的建立工程方法,照猫画虎的建立一个win32 项目。如下图:(如果看不到此图,请用IE浏览器。本人测试有效)


然后理所当然的选择教科书上的空项目:



然后添加cpp文件:

然后编辑cpp(测试代码见文章末),完成。

终于建好了,想看看运行结果,兴奋的按了Ctrl + F5,但让你失望的是 : 编译错误。仔细检查代码,和书上完整无误。这下可急了。

你会认为自己用的是vs2010,建立项目的过程和教材上用vc6.0建立的过程完全一样啊,怎么还不能正常编译???(vs2010里面叫win32 项目,vc6.0里面叫win32 application,形似,但不完全相同)

原来错误就发生在vs2010和vc6.0 的默认设置不同。详细如下:

 

这两个IDE默认的文档编码不同,vs2010默认是UNICODE编码,而vc6.0是MBCS,所以在vs2010里面编译的时候你会发现在字符串赋值的地方无法通过(下面代码中红色部分)。所以最简单的办法就是修改默认的编码方式。方法有二种:

 

一:把当前项目的项目设置中的编码方式改成MBCS,过程如下:

选择项目--属性:‍

 

然后修改MBCS

点击确定,保存即可。然后再运行,你会发现惊喜出现了。哈哈,搞定了。(严重推荐用第一种方法

 二:将char 用TCHAR代替,并用_T()宏把字符串包含进来。

 

 结语:工具虽好,但要会用。否则拿着碧血剑,不开“鞘”怎么用!

 

附:上文中所提到的代码:

#include <windows.h>

#include <stdio.h>

 

LRESULT CALLBACK WinSunProc(

HWND hwnd,      // handle to window

UINT uMsg,      // message identifier

WPARAM wParam,  // first message parameter

LPARAM lParam   // second message parameter

);

 

int WINAPI WinMain(

HINSTANCE hInstance,      // handle to current instance

HINSTANCE hPrevInstance,  // handle to previous instance

LPSTR lpCmdLine,          // command line

int nCmdShow              // show state

)

{

WNDCLASS wndcls;

wndcls.cbClsExtra=0;

wndcls.cbWndExtra=0;

wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);

wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);

wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);

wndcls.hInstance=hInstance;

wndcls.lpfnWndProc=WinSunProc;

wndcls.lpszClassName="BitBible";  

wndcls.lpszMenuName=NULL;

wndcls.style=CS_HREDRAW | CS_VREDRAW;

RegisterClass(&wndcls);

 

HWND hwnd;

hwnd=CreateWindow("BitBible","http://hi.baidu.com/donghao8/home",WS_OVERLAPPEDWINDOW,

0,0,600,400,NULL,NULL,hInstance,NULL);

 

ShowWindow(hwnd,SW_SHOWNORMAL);

UpdateWindow(hwnd);

 

MSG msg;

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

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

 

LRESULT CALLBACK WinSunProc(

HWND hwnd,      // handle to window

UINT uMsg,      // message identifier

WPARAM wParam,  // first message parameter

LPARAM lParam   // second message parameter

)

{

switch(uMsg)

{

case WM_CHAR:

char szChar[20];

sprintf(szChar,"char code is %d",wParam);

MessageBox(hwnd,szChar,"char",0);

break;

case WM_LBUTTONDOWN:

MessageBox(hwnd,"mouse clicked","message",0);

HDC hdc;

hdc=GetDC(hwnd);

TextOut(hdc,0,50,"BitBible",strlen("BitBible"));

//ReleaseDC(hwnd,hdc);

break;

case WM_PAINT:

HDC hDC;

PAINTSTRUCT ps;

hDC=BeginPaint(hwnd,&ps);

TextOut(hDC,0,0,"http://hi.baidu.com/donghao8/home",strlen("http://hi.baidu.com/donghao8/home"));

EndPaint(hwnd,&ps);

break;

case WM_CLOSE:

if(IDYES==MessageBox(hwnd,"BitBible\n是否真的结束?","message",MB_YESNO))

{

DestroyWindow(hwnd);

}

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hwnd,uMsg,wParam,lParam);

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值