mfc深入浅出第一个例子疑问
这时mfc上的例子
全部代码如下:
//----------------------------------------------------------------
// 文件名:generic.h
//----------------------------------------------------------------
BOOL InitApplication(HANDLE);
BOOL InitInstance(HANDLE,int);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK About(HWND,UINT,WPARAM,LPARAM);
//-----------------------------------
//文件名:resource.h
//-----------------------------------
#ifndef __RESOURCE_H__
#define __RESOURCE_H__
#define IDM_NEW 102
#define IDM_SAVE 103
#define IDM_EXIT 104
#define IDM_ABOUT 105
#endif
//----------------------------------------
//文件名:Generic.rc
//-----------------------------------------
#include "windows.h"
#include "resource.h"
jjhouricon ICON "jjhour.ico";
GenericMenu MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New",IDM_NEW,GRAYED
MENUITEM "Save",IDM_SAVE,GRAYED
MENUITEM "E&xit",IDM_EXIT
END
POPUP "&Help"
BEGIN
MENUITEM "ABout...",IDM_ABOUT
END
END
AboutBox DIALOG 22,17,144,75
STYLE DS_MODALFRAME|WS_CAPTION|WS_SYSMENU
CAPTION "About generic"
BEGIN
CTEXT "Window2000",-1,0,5,144,8
CTEXT "Generic Application",-1,0,14,144,8
CTEXT "Version 1.0",-1,0,34,144,8
DEFPUSHBUTTON "OK",IDOK,53,59,32,14,WS_GROUP
END
//----------------------------------------------------------------
// GENERIC--WIN32程序的基础写法
//文件名:GENERIC.CPP
//
//----------------------------------------------------------------
#include <windows.h>
#include "resource.h"
#include "generic.h"
HINSTANCE _hInst;
HWND _hWnd;
char _szAppName[]="Generic";
char _szTitle[]="Generic Sample Application";
//----------------------------------------------------------------
// WinMain---程序进入点
//
//----------------------------------------------------------------
int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG msg;
if (!hInstance)
if (!InitApplication(hInstance))
return FALSE;
//判断初始化是否成功
if (!InitInstance(hInstance,nCmdShow))
return FALSE;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}
//----------------------------------------------------------------
//InitInstance--注册窗口类别
//
//----------------------------------------------------------------
BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASS wc;
wc.style =CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc =(WNDPROC)WndProc;
wc.cbClsExtra =0;
wc.cbWndExtra =0;
wc.hInstance =hInstance;
wc.hIcon =LoadIcon(hInstance,IDI_WINLOGO);
wc.hCursor =LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName =NULL;
wc.lpszClassName =_szAppName;
//注册创建窗体的资源
return RegisterClass(&wc);
}
//----------------------------------------------------------------
// InitInstance---产生窗体
//
//
//----------------------------------------------------------------
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)
{
_hInst=hInstance;
_hWnd=CreateWindow(_szAppName,_szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
if (!_hWnd)
return FALSE;
ShowWindow(_hWnd,nCmdShow);
UpdateWindow(_hWnd);
return TRUE;
}
//----------------------------------------------------------------
// WndProc--窗体函数
//
//
//----------------------------------------------------------------
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
int wmId,wmEvent;
switch(message)
{
case WM_COMMAND:
wmId =LOWORD(wParam);
wmEvent =HIWORD(wParam);
switch(wmId)
{
case IDM_ABOUT:
DialogBox(_hInst,
"AboutBox",
hWnd,
(DLGPROC)About
);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}
//----------------------------------------------------------------
// About--弹出框函数
//
//
//----------------------------------------------------------------
LRESULT CALLBACK About(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam)==IDOK || LOWORD(wParam)==IDCANCEL)
{
EndDialog(hDlg,TRUE);
return TRUE;
}
break;
}
return FALSE;
}
以上代码不能通过编译
报
new_1 error LNK2019: 无法解析的外部符号 "int __cdecl InitInstance(void *,int)" (?InitInstance@@YAHPAXH@Z) ,该符号在函数 _WinMain@16 中被引用
new_1 error LNK2019: 无法解析的外部符号 "int __cdecl InitApplication(void *)" (?InitApplication@@YAHPAX@Z) ,该符号在函数 _WinMain@16 中被引用
new_1 fatal error LNK1120: 2 个无法解析的外部命令
而如果把InitApplication和InitInstance这两个基本点函数的内容直接写到winmain
中,就可以正常通过编译并执行.
如:
int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG msg;
/*if (!hInstance)
if (!InitApplication(hInstance))
return FALSE;*/
WNDCLASS wc;
wc.style =CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc =(WNDPROC)WndProc;
wc.cbClsExtra =0;
wc.cbWndExtra =0;
wc.hInstance =hInstance;
wc.hIcon =LoadIcon(hInstance,IDI_WINLOGO);
wc.hCursor =LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName ="GenericMenu";
wc.lpszClassName =_szAppName;
RegisterClass(&wc);
_hInst=hInstance;
_hWnd=CreateWindow(_szAppName,
_szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
//if (!_hWnd)
//return FALSE;
ShowWindow(_hWnd,nCmdShow);
UpdateWindow(_hWnd);
//判断初始化是否成功
/*if (!InitInstance(hInstance,nCmdShow))
return FALSE;*/
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}
这是为什么呢?如果写到函数里的话应该怎么写才正确
我的环境是vs2003
请各位帮忙。~~~~~~~~~
相关推荐
(源码)基于C语言的F2FS文件系统工具集.zip
# 基于C语言的F2FS文件系统工具集 ## 项目简介 本项目是基于C语言的F2FS文件系统工具集,用于F2FS文件系统的创建、检查、修复、监控和管理。F2FS专为闪存(如SSD)优化,适用于移动设备和需快速随机读写的设备。该工具集包含命令行工具与库函数,可处理F2FS文件系统的格式化、检查、加密、IO监控等操作。 ## 项目的主要特性和功能 1. 文件系统创建借助f2fsformat命令和工具,能在指定设备创建新的F2FS文件系统。 2. 文件系统检查与修复利用fsck工具,可检查F2FS文件系统完整性并修复常见错误。 3. 文件系统监控通过f2fstat工具,可监控F2FS文件系统的状态信息,如数据块使用情况、内存使用情况、文件系统操作统计等。 4. IO监控与分析f2fsio工具提供多种针对F2FS文件系统的IO操作命令,包括同步、设置verity位、获取文件标志等。
网络安全攻防实战:从漏洞原理到修复策略的深度解析
在网络安全领域,漏洞是攻防对抗的核心。从概念上讲,漏洞源于软件或系统的设计缺陷、配置错误或实现疏忽,为攻击者提供了可乘之机。其原理在于攻击者通过构造恶意输入或利用逻辑缺陷,绕过安全机制,达成未授权访问、数据窃取或代码执行等目的。理解漏洞原理对于构建有效防御体系具有关键的技术价值,它使安全从业者能够预测攻击路径,并实施精准的防护措施。常见的应用场景包括Web应用安全、系统安全加固以及网络协议安全等。本文聚焦于跨站脚本(XSS)、信息泄露(如CVE-2023-23752)等典型漏洞,深入剖析其利用链与修复方案,
漏洞利用与防护绕过实战:从SQL注入到WAF绕过技术解析
在网络安全领域,漏洞利用与防护绕过是攻防对抗的核心。漏洞利用通常指攻击者利用软件或系统中的设计缺陷,通过构造恶意载荷触发非预期行为,如远程代码执行或数据窃取。其技术原理涉及对系统弱点(如输入验证缺失、权限配置错误)的精准定位与利用。防护绕过则是在目标部署了安全设备(如WAF、IDS)后,攻击者通过编码混淆、语法变形、协议特性利用等手段,使恶意流量规避检测规则。这两项技术的工程价值在于,理解攻击链能帮助防御者构建更有效的纵深防护体系,从代码安全、配置加固到动态检测形成闭环。在实际应用场景中,无论是针对常见We
AWD攻防演练一体化平台:C/S架构下的漏洞利用与流量监控实战
在网络安全竞赛和实战演练中,漏洞利用与流量监控是攻防对抗的两大核心。漏洞利用涉及对目标系统安全弱点的自动化探测与攻击,而流量监控则是防御方进行威胁感知和攻击溯源的关键技术。其技术价值在于通过自动化与集中化,将零散的工具和操作整合为高效的作战体系,从而在AWD(Attack With Defense)等时间紧迫的攻防场景中,显著提升团队的协同效率和响应速度。应用场景广泛覆盖CTF竞赛、红蓝对抗演练及安全团队内部培训。本文介绍的一体化作战平台,正是基于C/S架构,将漏洞利用管理、实时流量监控分析、分布式任务调度
Beef-xss实战:从XSS漏洞到浏览器远程控制的攻防解析
跨站脚本(XSS)漏洞是Web安全领域的常见威胁,其原理在于攻击者能够将恶意脚本注入到可信网页中,当用户访问该页面时,脚本会在其浏览器中执行。这种漏洞的技术价值在于它突破了浏览器的同源策略,使得攻击者能够窃取用户会话、盗取敏感信息,甚至以用户身份执行未授权操作。在工程实践中,XSS常被用作攻击链的初始入口,结合自动化框架可大幅提升攻击效率与隐蔽性。例如,通过80端口漏洞利用获取Web服务器权限后,植入XSS载荷可实现对内部员工浏览器的持续监控;而利用类似CVE-2023-23752的API信息泄露漏洞,攻击


