使用VS编程的,当我们使用MFC类、Windows API、c++标准库时,是怎么实现的?

昵称是神马 2013-07-19 10:03:18
使用VS编程的,当我们使用MFC类、Windows API、c++标准库时,是怎么实现的?

比如我的程序使用了MFC类,只需要包含相应的头文件就可以,vs是包含的这些类的cpp文件吗,然后再编译进来?如果这样的话,为什么需要选择是静态使用MFC库还是共享使用MFC库呢?


如果使用windows API的话,vs又是怎么编译链接的?

还有标准库也是包含一个头文件就可以,运行时库又是怎么编译链接进来的?
...全文
471 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
昵称是神马 2013-07-24
  • 打赏
  • 举报
回复
引用 12 楼 adlay 的回复:
引用 11 楼 yujiefei0309 的回复:
[quote=引用 7 楼 adlay 的回复:] MFC 和 CRT 的源代码不只是说让你学习, 主要是程序崩溃在里面的函数中的时候, 你可以带源代码进行调试. 否则你就只有看汇编调试了.
生成exe的时候使用的是已经编译好的lib或者dll,没有使用这些源码,也可以使用这些源码进行调试吗?为什么可以这样?
有 pdb 文件就行了. 里面记录了哪行汇编对应源代码的哪个文件的第几行.[/quote]大神!膜拜!
www_adintr_com 2013-07-24
  • 打赏
  • 举报
回复
引用 11 楼 yujiefei0309 的回复:
引用 7 楼 adlay 的回复:
MFC 和 CRT 的源代码不只是说让你学习, 主要是程序崩溃在里面的函数中的时候, 你可以带源代码进行调试. 否则你就只有看汇编调试了.
生成exe的时候使用的是已经编译好的lib或者dll,没有使用这些源码,也可以使用这些源码进行调试吗?为什么可以这样?
有 pdb 文件就行了. 里面记录了哪行汇编对应源代码的哪个文件的第几行.
昵称是神马 2013-07-24
  • 打赏
  • 举报
回复
引用 7 楼 adlay 的回复:
MFC 和 CRT 的源代码不只是说让你学习, 主要是程序崩溃在里面的函数中的时候, 你可以带源代码进行调试. 否则你就只有看汇编调试了.
生成exe的时候使用的是已经编译好的lib或者dll,没有使用这些源码,也可以使用这些源码进行调试吗?为什么可以这样?
昵称是神马 2013-07-20
  • 打赏
  • 举报
回复
引用 7 楼 adlay 的回复:
MFC 和 CRT 的源代码不只是说让你学习, 主要是程序崩溃在里面的函数中的时候, 你可以带源代码进行调试. 否则你就只有看汇编调试了.
那就是如果选择共享MFC库的话,发布的时候就得连MFC的dll一起发布,如果运行时库选择MD的话,发布就得连运行时库的dll一起发布,而选MT则不用,是这样吗?
www_adintr_com 2013-07-20
  • 打赏
  • 举报
回复
是的
昵称是神马 2013-07-19
  • 打赏
  • 举报
回复
引用 7 楼 adlay 的回复:
MFC 和 CRT 的源代码不只是说让你学习, 主要是程序崩溃在里面的函数中的时候, 你可以带源代码进行调试. 否则你就只有看汇编调试了.
原来是这样啊,说起来程序崩溃的时候,确实会跳到一些.c的源码中去,平时没怎么注意。。。
www_adintr_com 2013-07-19
  • 打赏
  • 举报
回复
MFC 和 CRT 的源代码不只是说让你学习, 主要是程序崩溃在里面的函数中的时候, 你可以带源代码进行调试. 否则你就只有看汇编调试了.
昵称是神马 2013-07-19
  • 打赏
  • 举报
回复
引用 2 楼 akirya 的回复:
mfc是 静态库,ms预编译了几个版本的。 C++标准库是模板,直接源码编译。 api是动态库,lib只是链接时用,功能在dll中。
只有c++标准库是需要源码编译的吗?
www_adintr_com 2013-07-19
  • 打赏
  • 举报
回复
引用 3 楼 yujiefei0309 的回复:
[quote=引用 1 楼 adlay 的回复:] 都是使用的 .lib 文件. 没有使用 cpp 的说法. .lib 分两种, 一种是 .lib 文件里面包含了 cpp 编译出来的代码, 链接的时候把需要的代码拷贝到 exe 里面. mfc, crt 在选择静态的时候使用这种方式. 另外一种是 .lib 中不包含代码, 只是描述该到哪个 dll 里面怎么找对应的代码. 这种编译出来的 exe 就需要 dll 一起才能运行. mfc, crt 使用共享库的时候, 以及 Windows API 就是使用的这种方式.
windows API使用的是dll,为什么在发布程序的时候,不需要一起发布这些windows的dll呢?vs里面的这些dll在哪里?[/quote] API 的 dll 在 windows 系统的 system32 目录下, 每个系统都带着有, 当然不用和程序一起发布. 图形界面相关的 API 在 USER32.dll 里. 进程, 文件之类的操作在 kernel32.dll 里. 其余的具体看吧, MSDN 的每个函数都会说明它在哪个头文件, 哪个 lib, 哪个 dll 里的.
昵称是神马 2013-07-19
  • 打赏
  • 举报
回复
引用 2 楼 akirya 的回复:
mfc是 静态库,ms预编译了几个版本的。 C++标准库是模板,直接源码编译。 api是动态库,lib只是链接时用,功能在dll中。
也就是说,vs里面MFC的cpp文件只是提供学习研究的,在编译的时候,根据项目属性,使用的是对应的lib,而并不会编译这些源码,是这样吗?
昵称是神马 2013-07-19
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
都是使用的 .lib 文件. 没有使用 cpp 的说法. .lib 分两种, 一种是 .lib 文件里面包含了 cpp 编译出来的代码, 链接的时候把需要的代码拷贝到 exe 里面. mfc, crt 在选择静态的时候使用这种方式. 另外一种是 .lib 中不包含代码, 只是描述该到哪个 dll 里面怎么找对应的代码. 这种编译出来的 exe 就需要 dll 一起才能运行. mfc, crt 使用共享库的时候, 以及 Windows API 就是使用的这种方式.
windows API使用的是dll,为什么在发布程序的时候,不需要一起发布这些windows的dll呢?vs里面的这些dll在哪里?
  • 打赏
  • 举报
回复
mfc是 静态库,ms预编译了几个版本的。 C++标准库是模板,直接源码编译。 api是动态库,lib只是链接时用,功能在dll中。
www_adintr_com 2013-07-19
  • 打赏
  • 举报
回复
都是使用的 .lib 文件. 没有使用 cpp 的说法. .lib 分两种, 一种是 .lib 文件里面包含了 cpp 编译出来的代码, 链接的时候把需要的代码拷贝到 exe 里面. mfc, crt 在选择静态的时候使用这种方式. 另外一种是 .lib 中不包含代码, 只是描述该到哪个 dll 里面怎么找对应的代码. 这种编译出来的 exe 就需要 dll 一起才能运行. mfc, crt 使用共享库的时候, 以及 Windows API 就是使用的这种方式.

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧