第一章 起步

动态链接

Windows工作原理的中心思想就是“动态链接”概念。Windows自身带有一大套函数应用程序就是通过调用这些函数来实现它的用户界面和在屏幕上显示文本与图形的。这些函数都是在动态链接库里实现的。这些文件的名称都带有后缀.DLL,或有时带有后缀.EXE在 Windows98 中,这些文件通常放在 \WINDOWS\SYSTEM 子目录下,而在WindowsNT中,则放在 \WINNT\SYSTEM\WINNT\SYSTEM32子目录下
早期Windows的大部分只是实现了3个动态链接库。它们分别代表了 Windows的3个主要的子系统,即内核(kernel)用户(user) 以及 GDI

lib和dll

当链接Windows程序以生成执行文件时,一定得链接你的编程环境所提供的特殊的 “导入库”(import library)。这些导入库包含所有 Windows函数调用要碰到的 动态链接库(dll) 的名字及引用信息。链接程序利用这些信息构建EXE 文件中的表格,当装入程序的时候,Windows要靠这些表格来解析Windows函数调用

第一个Windows程序

注意:开发环境为VS 2022

#include <Windows.h>

int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR szCmdLine, _In_ int iCmdShow)
{
	MessageBox(NULL, TEXT("text"), TEXT("text1"), MB_YESNOCANCEL);

	return 0;
}

编译错误

MSVCRTD.lib(exe_main.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 "int __cdec

主要原因是因为windows程序的话,WinMain是入口函数,而控制台程序,那么main是入口函数,此时没有配置为windows程序,导致入口函数错误

需要进行如下修改:

  • 右键解决方案中的方案,选择属性
  • 在左边栏中依次选择:配置属性 -> C/C++ -> 预处理器,然后在右边栏的预处理器定义对应的项中删除 _CONSOLE, 添加 _WINDOWS
  • 在左边栏中依次选择:配置属性 -> 链接器 -> 系统,然后在右边栏的 子系统对应的项改为 窗口(/SUBSYSTEM:WINDOWS)

注意:属性中有平台选项,选项值对应调试中的对应选项,不要出现属性平台选项修改了Win32的,然后调试却在使用x64的问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值