关于使用Visual C++ 编写API(Application Programming Interface)函数时编译那点事

对于大都数初学windows程序设计的学习者来说,经常会出现很多错误,很多人编写程序编译通过了,可是连接却始终出现错误,这着实令人头疼

下面先开一个编写API函数时常见的错误吧:

图示是我在编写一个简单的API函数:

#include<windows.h>


LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);    //窗口函数声明


int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd;
MSG Msg;

        //----------------------------------定义并初始化窗口类---------------------------------
WNDCLASS wndclass;
char lpszClassName[] = "窗口";

static TCHAR szAppName[] = TEXT ("HelloWin");
char lpszTitle[] = "My_Windows";


wndclass.style = 0;
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 = lpszClassName;


       //--------------------------窗口类的注册---------------------------
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program require Windows NT!"),szAppName,MB_ICONERROR);
return FALSE;
}

        //创建窗口
hwnd = CreateWindow(
                lpszClassName,
                    lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);

        //消息循环
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}


//窗口函数定义
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}

当进行编译时,编译通过,可是进行连接时却出现了一个错误,这让我着实头疼


经过查阅相关资料发现:

在创建API项目时,如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如我今天遇到的:

LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main

解决方法:

控制台项目要使用windows子系统, 而不是console, 设置:
[Project] (工程)--> [Settings](设置) --> 选择"Link(连接)"属性页,
在Project Options中将/subsystem:console改成/subsystem:windows.

程序运行结果如下

需要注意的是:

在新建工程时要分清Win32 Application和Win32 Console Application.它们都是工作在32位Windows环境的程序.其中Win32 Application 就是普通的常见的窗口应用程序,它们都是所谓的GUI(Graphics User Interface图形用户接口.而Win32 Console Application(win32控制台应用程序)往往是像MS-DOS窗口(XP中叫命令提示符)的样子出现,或者叫CUI(Character User Interface字符用户接口)。

因为Win32 Application的入口函数为WinMain
Win32 Console Application的入口函数是main也就是说,如果你编写传统的C程序,必须建立Win32 Console程序,但VC里面默认的是Win32 Application,于是上面提及的链接错误就就经常出现了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值