visual basic开发实例大全(基础卷_【Windows SDK学习】基础概念介绍

0b53dd4b9b26e811e190b6bb8a6b90c2.png

什么是Windows SDK?

SDK即Software Develope Kit(软件开发工具包),它包含了进行Windows软件开发的文档和API函数的输入库、头文件(因为API在动态链接库中,这些动态链接库是系统的组成部分,因此不用再提供,而输入库和头文件则必须,这样才能在你的程序中使用API函数)。

早期SDK是一个单独发放的包,现在在Visual C++和其他一些开发环境中已经包含了它,如果你已经安装了VC++,那么就可以开始编写Windows程序了。

本文是 i 春秋论坛作家「flag0」表哥原创的关于Windows SDK学习的系列文章,公众号旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。

SDK入门(基础概念)

SDK—Software Development Kit 软件开发包

应用程序=>操作系统=>输入输出设备

操作系统提供API使应用程序操作输入输出设备

API

  • API Accplcation programing interface 应用程序编程接口
  • 即操作系统提供的一组功能函数

内核对象

  • 用户和内核模式
  • 80386芯片的4个权限级别:0~3
  • Windows系统所使用的两个权限级别:0,3
  • 操作系统运行在0环
  • 一阶段开发的程序运行在3环

句柄

  • 句柄 - 内核对象的唯一标识符

消息机制

  • 使用回调函数(函数指针) 来实现
  • Windows是消息驱动的操作系统

Console程序与Windows程序区别

  • 任务执行不同
  • 控制台程序只能单任务执行,windows程序可以多任务(多线程)执行。

0284203b113265e48f44c5fde88c3908.gif

01_2

入口函数不同

windows程序

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
  return 0;
}

控制台程序和windows程序的编译链接选项也是有所不同的。

Console:/SUBSYSTEM:CONSOLE

Windows:/SUBSYSTEM:WINDOWS

1e85e76b1ec8bfb28c6f068964c36728.png

main函数参数

  • APIENTRY: __stdcall调用约定
  • _In_: 说明性宏
  • HINSTANCE hInstance: 实例句柄,代表应用程序本身
  • HINSTANCE hPrevInstance: 已弃用,为了兼容老的入口函数
  • LPWSTR lpCmdLine: 命令行参数
  • int nCmdShow: 控制显示

关闭随机基址:属性页->连接器->高级->随机基址

在Console程序中,关闭掉随机基址后,hInstance指向0x00400000。

在windows程序中,关闭掉随机基址后,hInstance也是指向0x00400000。

进程访问到的内存地址是虚拟的,是相互隔离的。

虚拟内存

每个32位的程序都有自己独立的4GB虚拟空间,其中低2G为用户可以操作的空间。

0~64K为保留区,高2G为操作系统操作的空间。

0700833bb4c77d5a8f000f8d74b78d83.png

进程间的内存隔离

a32b5e6d0a08a75967b02225e05daa0c.png

会将低2G的用户空间映射到物理内存条不同的位置,来实现内存中的每个程序的地址空间是互相隔离的。

当物理内存不够用时,会将一部分内存放到磁盘空间中。

hInstance是EXE程序在进程中的首地址,即其从磁盘拷贝向虚拟内存实从0x400000开始拷贝的。

MessageBox

查询MSDN时,选择Platform SDK版本。

67e537fb3b294b2412a27c3848a10891.png
int MessageBox(
  HWND hWnd,          //窗口句柄
  LPCTSTR lpText,     //弹窗内容
  LPCTSTR lpCaption,  //弹窗标题
  UINT uType          //弹窗类型
);

MessageBox是宏定义,采用条件编译,在UNICODE和非UNICODE之间,切换。

#ifdef UNICODE
#define MessageBox  MessageBoxW
#else
#define MessageBox  MessageBoxA
#endif // !UNICODE

当用ASCII时会调用MeaageBoxA,使用UNICODE的会调用MessageBoxW。

当Windows中涉及字符串的都会有两个版本。

在编译选项中,字符集位置来定义是否是UNICODE字符集。

9d802c7a42cdea0b34255c338bd954f4.png

多字节字符集是ASCII码(GBK编码,中文占两个字节,英文占一个字节)。

<tchar.h>中的_T( )依附于条件编译宏_UNICODE。

Windows提供了一个类似于_T( )的宏,TEXT( )。

MessageBox(NULL, TEXT("Hello World!"), TEXT("标题"), MB_OKCANCEL);

TEXT( )和_T( )的区别:

TEXT( )属于WindowsSDK,只能在Windows上运行不支持其他系统,_T属于C标准库<tchar.h>可以支持跨平台。

b607f72e9a09b6627983b9b992a8dda1.png

UNICODE宏开关的三个定义位置:

1、头文件之前定义 #define UNICODE;

2、可以用属性->高级->字符集 来定义;

3、可以用 属性->C/C++ -> 预处理器 -> 预处理器定义 来定义。

Windows.h头文件中,将基础类型进行了重新定义,为了提高可读性和方便升级。

HINSTANCE --> HINSTANCE --> Handle Instance

HWND --> HWND --> Handle Window

LPWSTR --> lpWSTR --> Long Pointer Wide Str

以上是今天要分享的内容,大家看懂了吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
备注:这是书,而不是源代码连接地址:http://www.dearbook.com.cn/book/34254#bookCatalog第l章 Visual Basic数据库开发技巧 1.1 使用ADO操纵数据库 1.2 封装数据库操作 1.3 采用三层架构设计模式 1.4 Visual Basic开发工具对比 1.5 Viual Basic学习的相关建议 1.6 数据库设计和开发技巧 1.7 小结第2章 股票信息管理系统 2.1 系统概述 2.2 系统设计 2.3 数据库设计 2.4 数据库的生成与配置 2.5 用Visual Basic 6.0开发股票信息管理系统 2.6 股票信息管理系统主界面设计 2.7 股票信息操作模块 2.8 股票信息分析模块 2.9 用户管理模块 2.10 用户登录模块 2.11 经验与技巧 2.12 系统的调试与注意事项 2.13 系统的编译和发行 2.14 小结第3章 访客管理系统 3.1 系统概述 3.2 系统设计 3.3 数据库设计 3.4 数据库的生成与配置 3.5 公共模块 3.6 用户登录界面设计 3.7 用户管理界面设计 3.8 用户操作记录界面设计 3.9 关于界面设计 3.10 系统主界面设计 3.11 开发难点与技巧 3.12 系统的调试与注意事项 3.13 系统的编译和发行 3.14 小结第4章 企业内部业务联系系统 4.1 系统概述 4.2 系统设计 4.3 数据库设计 4.4 数据库的生成与配置 4.5 创建客户端界面应用程序 4.6 系统主界面设置 4.7 加入公共模块 4.8 加入界面设置模块 4.9 用户登录模块 4.10 提取信息模块 4.11 查看信息模块 4.12 发送信息模块 4.13 查询信息模块 4.14 删除信息模块 4.15 用户管理模块 4.16 开发难点与技巧 4.17 系统的调试与注意事项 4.18 系统的编译和发行 4.19 小结第5章 客户管理系统 5.1 系统概述 5.2 系统设计 5.3 数据库设计 5.4 数据库的生成与配置 5.5 用Visual Basic开发客户管理事务处理组件 5.6 在客户管理系统中使用客户管理组件 5.7 客户管理主界面设置 5.8 加入公共模块 5.9 客户类型信息管理模块 5.10 客户信息管理模块 5.1l 客户合作信息管理模块 5.12 事件提醒信息管理模块 5.13 开发难点与技巧 5.14 系统的调试与注意事项 5.15 系统的编译和发行 5.16 小结第6章 超市进销存管理系统 6.1 系统概述 6.2 系统设计 6.3 数据库设计 6.4 数据库的生成与配置 6.5 创建应用程序结构 6.6 开发业务逻辑处理组件 6.7 开发基本界面组件 6.8 用户界面端应用程序设计 6.9 经验与技巧 6.10 系统的调试与注意事项 6.11 系统的编译和发行 6.12 小结第7章图书馆管理系统 7.1 系统概述 7.2 系统设计 7.3 数据库设计 7.4 数据库的生成与配置 7.5 网络通讯协议的设计 7.6 服务器端公共模块 7.7 服务器端主界面设计. 7.8 客户端公共模块 7.9 客户端连接服务器界面设计 7.10 客户端图书借阅界面设计 7.11 客户端图书归还界面设计 7.12 客户端缴纳罚款界面设计 7.13 客户端图书类别管理界面实现代码 7.14 客户端图书信息管理界面实现代码 7.15 客户端读者信息管理界面实现代码 7.16 客户端管理员

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值