_UNICODE UNICODE的后续问题

ForestDB 2010-04-13 09:51:15
_T _TEXT TEXT, _UNICODE UNICODE辨析
在这个贴子里,我问到了关于这些宏的一些区别,在回答中有人提到了CRT和Windows头文件。

我的新的问题就是CRT中的函数和Windows的函数(APIs?)有何区别?
如果完成一个功能在这两个里面都有类似的函数,应该选择哪个来完成功能?为什么这么选择?
Windows编程有几种方式,SDK?MFC?还有没有别的?
Windows编程中有无Linux中syscall的概念?
...全文
379 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2010-04-21
  • 打赏
  • 举报
回复
沉了。
wltg2001 2010-04-18
  • 打赏
  • 举报
回复
技术问题用不着争, 争也解决不了技术问题.
=======
这个观点不同意,技术问题是必须要争的,我所说不争是因为我们讨论的实在不是一个技术问题,不过是一个名词之争而已,你所定义的CRT与我定义的CRT并不是一回事。
你所说的API必定要调用系统核心,这个大家都明白,这些核心是由C语言实现的,而在这个原始版本的C语言中必定有一个CRT库,这个也没有问题,我所说的是,不能因为实现window的是C语言,就将window所提供的API也划到CRT的范围中去。
I_NBFA 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 wltg2001 的回复:]
不争了,横竖不过是名词之争吧,我对于CRT的定义是C/C++语言的运行库。
API虽然是由C语实现的,但是它是已经编译链接好的程序,总不能说因为实现它的是C语言,就将它也归为C运行库吧。
[/Quote]
技术问题用不着争, 争也解决不了技术问题.
语言搭配语言库是很自然的事情,
API最终必定涉及到系统核心调用, 这些核心必定要使用原始CRT里的调用.
该表达的我都说了, 这个问题我不会再回复了.
ForestDB 2010-04-18
  • 打赏
  • 举报
回复
有道理,VB,Delphi也可以调APIs的说。
wltg2001 2010-04-18
  • 打赏
  • 举报
回复
不争了,横竖不过是名词之争吧,我对于CRT的定义是C/C++语言的运行库。
API虽然是由C语实现的,但是它是已经编译链接好的程序,总不能说因为实现它的是C语言,就将它也归为C运行库吧。
ForestDB 2010-04-18
  • 打赏
  • 举报
回复
up.
wltg2001 2010-04-17
  • 打赏
  • 举报
回复
另外,如果API是CRT是真子集,那么,老兄,VB,DELPHI这些东西也是用不着CRT的,那么它们连API都调用不了了?
wltg2001 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 i_nbfa 的回复:]
引用 24 楼 wltg2001 的回复:
之后又往CRT里丢了一大堆API和C/C++标准库调用(ISO C/C++), 以及其他乱七八糟的东西.....
因此整个windows系统都要依赖CRT才能跑起来.
API自然不例外, 你可以将其理解为CRT的一个真子集.
==============
胡说八道,API是CRT的子集?从哪看来的啊?CRT是随编译器一起发布的运行库,而API是……
[/Quote]
这不是信与不信的问题,而是是与不是的问题。

简单的说,
当初开发windows的那些老头们先写了一个最原始的CRT
=============
CRT的历史恐怕比windows要早得多吧,MS只是提供了Windows下的C/C++运行库而已,在C语言一级,不同系统的CRT基本上是一样的。
I_NBFA 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 wltg2001 的回复:]
之后又往CRT里丢了一大堆API和C/C++标准库调用(ISO C/C++), 以及其他乱七八糟的东西.....
因此整个windows系统都要依赖CRT才能跑起来.
API自然不例外, 你可以将其理解为CRT的一个真子集.
==============
胡说八道,API是CRT的子集?从哪看来的啊?CRT是随编译器一起发布的运行库,而API是由window的各种DLL实现的。
[/Quote]
我就知道有人反对, 不做过多解释, 信不信自便.
I_NBFA 2010-04-17
  • 打赏
  • 举报
回复
你说对了, CRT比windows更早诞生.
你写个软件需要顺手的调用库来完成一些常用通用的任务么?
windows也是个软件, 其大部分用C编写自然也需要个顺手的CRT.
这个CRT暂称为原始CRT吧, 它与windows无关, 那时windows还在娘胎里了. 它娘就是原始CRT.
DLL是更高层的技术, 需要依赖他爹地, 他爹地叫windows.
DLL有了, 接下来API出生. 这些API有的调用原始CRT, 有的调用其他API.
而它们也被丢到CRT里(API也是用C实现的), 后来标准C/C++库又来凑热闹. 这部分暂称为扩展CRT吧.
因此整个CRT包括两大部分, 原始的与扩展的, 原始CRT独立于windows, 但windows要依赖它.
扩展CRT依赖windows系统. API属于整个CRT的一个真子集. 标准C/C++库同样是个真子集而已.
至于你说随编译器发布的CRT, MS当然可以只给你一部分, 整个CRT没必要人家也不愿意给.
wltg2001 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 forestdb 的回复:]
换个问法,如果要开发Windows程序,除了用Windows APIs,MFC,还有什么流行的、好用的选择?
“未公开”的调用到底可不可以用?哪里有比较全的信息?
[/Quote]
有啊,比如VB,Delphi等开发工具都可以开发啊,不过这些工具某些时候都会调用API。
未公开的API不提倡用,版本更新时这些API 是不是还支持就不一定了。
ForestDB 2010-04-16
  • 打赏
  • 举报
回复
upup.
尹成 2010-04-16
  • 打赏
  • 举报
回复
CRT中的函数和Windows的函数(APIs?)有何区别?
CRT是C++运行库中的函数,由编译器来保证这些函数在不同系统下的行为是一致的。在特定系统上,这些函数最终调用API来实现功能。

如果完成一个功能在这两个里面都有类似的函数,应该选择哪个来完成功能?为什么这么选择?
CRT除了使用简单,还有一定的兼容性,在不同的系统上,一般不用修改(原因如上)。而使用API,相对来说比较灵活,可控性较高,但是使用相对比较难,同时,如果在不同系统上,API一般也是不同的。

Windows编程有几种方式,SDK?MFC?还有没有别的?
MFC是一个框架,SDK则是API的包装,比如头文件、lib库等。我觉得谈不上编程方式。


Windows编程中有无Linux中syscall的概念?
windows的系统调用接口在ntdll.dll中导出,但是windows的系统调用基本都是不公开的,但是可以使用LoadLibrary和GetProcAddress来动态获取函数地址进行调
wltg2001 2010-04-16
  • 打赏
  • 举报
回复
创建文件夹,CRT和Windows API都有相应的函数,谁调谁呢?
==========
CRT调用API

API是操作系统提供的接口,或者说是操作系统提供给编程者的一个口子,CRT是编译器提供的静态库,对于不同操作系统下的CRT,在C语言源码一级上应该是相同的,比如打开文件,CRT函数是open,对于Window和Linux下的C/C++编译器,都是这个函数,但是在内部,open的实现却不一样,对于window下的C编译器提供的open这个函数,它的内部实现肯定会用到CreateFile,而Linux下的可能会用的Linux下的系统调用接口了。
wltg2001 2010-04-16
  • 打赏
  • 举报
回复
之后又往CRT里丢了一大堆API和C/C++标准库调用(ISO C/C++), 以及其他乱七八糟的东西.....
因此整个windows系统都要依赖CRT才能跑起来.
API自然不例外, 你可以将其理解为CRT的一个真子集.
==============
胡说八道,API是CRT的子集?从哪看来的啊?CRT是随编译器一起发布的运行库,而API是由window的各种DLL实现的。
ForestDB 2010-04-16
  • 打赏
  • 举报
回复
创建文件夹,CRT和Windows API都有相应的函数,谁调谁呢?
XiaoYan0101 2010-04-16
  • 打赏
  • 举报
回复
顶! CRT是C语言运行时库提供的 MFC 是C++的类库 而这些类库 可以组成相应的框架
最终 都依赖 windowsAPI
I_NBFA 2010-04-16
  • 打赏
  • 举报
回复
其他的不说了, 我就解释下第一个问题吧.
打开MSDN输入CRT(我用的2008):
The Microsoft run-time library provides routines for programming for the Microsoft Windows operating system. These routines automate many common programming tasks that are not provided by the C and C++ languages.

除了少量汇编, windows的核心基础是由C语言编写的并通过C语言开放编程接口,
这自然就需要一个C语言运行时库的支持, 它就是CRT.
后来CRT又加入对C++的支持, 因此现在是指C/C++ runtime library.
简单的说,
当初开发windows的那些老头们先写了一个最原始的CRT,
通过里面的各种调用开发出windows核心,
之后又往CRT里丢了一大堆API和C/C++标准库调用(ISO C/C++), 以及其他乱七八糟的东西.....
因此整个windows系统都要依赖CRT才能跑起来.
API自然不例外, 你可以将其理解为CRT的一个真子集.
ForestDB 2010-04-16
  • 打赏
  • 举报
回复
看来我的问题不怎么吸引人啊。
ForestDB 2010-04-15
  • 打赏
  • 举报
回复
顶顶。
加载更多回复(16)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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