首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Win32-API有这么多自定义类型?

为什么Win32-API有这么多自定义类型?
EN

Stack Overflow用户
提问于 2010-04-16 02:28:57
回答 4查看 6.9K关注 0票数 39

我是Win32应用编程接口的新手,许多新类型开始让我感到困惑。

有些函数使用1-2个ints和3个UINTS作为参数。

  • 为什么他们不能只使用int?什么是UINTS?

然后,还有其他类型:

DWORD LPCWSTR LPBOOL 

  • 再说一次,我认为“原始”的C类型就足够了--为什么要引入100个新类型呢?

这是一个痛苦的问题:WCHAR*

我不得不遍历它并将每个字符转换为std::push_back,因为没有其他方法可以将其转换为std::string。太可怕了。

  • 为什么选择WCHAR?为什么要重新发明轮子呢?他们可以直接使用char*,或者
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-16 02:36:47

Windows API最早创建于20世纪80年代,多年来不得不支持几种不同的CPU体系结构和编译器。它们已经从单用户、单进程的独立系统转变为网络化的多用户、多核心的安全意识系统。他们必须解决16位处理器与32位处理器之间的问题,现在是64位处理器。他们必须解决ANSI C编译器之前的问题。在早期的非标准化时代,他们必须支持C++编译器。他们不得不处理分段记忆。在Unicode出现之前,它们必须支持国际化。它们必须支持与MS-DOS、OS/2和Mac OS的一些源代码级别的兼容性。他们不得不在几代英特尔芯片上运行,还有PowerPC、MIPS、Alpha和ARM。桌面系统、服务器系统、移动系统和嵌入式系统都使用相同的基本API。

回到20世纪80年代,C语言被认为是一种高级语言(是的,真的!)许多人认为使用抽象类型而不是将所有内容都指定为原语intcharvoid *是一种很好的形式。回到我们还没有IntelliSense、信息提示、代码浏览器和在线文档等的时候,这样的用法提示很有帮助,它使得在不同的编译器和不同的编程语言之间移植代码变得更容易。

是的,这是一个可怕的混乱,但这并不意味着他们做错了什么。

票数 60
EN

Stack Overflow用户

发布于 2010-04-16 02:46:35

Win32实际上只有很少的原始类型。您所看到的是几十年来构建的#定义、typedefs和匈牙利符号。因为只有很少的类型,而且IntelliSense开发人员很少或根本没有给自己“线索”,告诉自己一个特定的类型实际上应该做什么。

例如,没有boolean类型,但是有一个整数的“别名”表示,它告诉您某个特定的变量应该被视为boolean。看看WinDef.h的内容,明白我的意思。

你可以在这里看一下:http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx,看看名副其实的冰山一角。例如,请注意HANDLE是如何作为windows对象的“句柄”的每个其他对象的基类型定义函数。当然,HANDLE在其他地方被定义为原语类型。

票数 5
EN

Stack Overflow用户

发布于 2010-04-16 02:36:31

UINT是一个无符号整数。如果参数值不是/不能是负数,那么指定unsigned是有意义的。LPCWSTR是指向常量宽字符数组的指针,而WCHAR*是非常量。

在使用宽字符时,您可能应该将应用程序编译为UNICODE,或者使用转换例程将窄字符转换为宽字符。

http://msdn.microsoft.com/en-us/library/dd319072%28VS.85%29.aspx

http://msdn.microsoft.com/en-us/library/dd374083%28v=VS.85%29.aspx

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2647982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档