gpt4 book ai didi

c++ - SHLoadImageFile(L"\\Program Files\\TrainingApp\\background.png");论点中的 L 是为了什么?

转载 作者:行者123 更新时间:2023-11-27 23:33:55 26 4
gpt4 key购买 nike

过去 2 年我一直在 linux 上使用 c++,最近切换到 windows c++ 编程。

谁能告诉我函数参数中的 L 是什么:

SHLoadImageFile(L"\\Program Files\\TrainingApp\\background.png");

在查看 MSVS C++ 中的某些示例代码时,我遇到了很多 typedef,例如..

LPARAM//typedef LONG_PTR LPARAM... 这里 LONG_PTR 又是 typedef as __w64 long

WPARAM//typedef UINT_PTR WPARAM...

所以有很多链接的 typedef。我从来没有在使用 gcc 的 linux 上看到这么多的 typedef 链接。

我想说的是,它只会以这种方式为 Windows 应用程序编程带来更多困惑。虽然我已经看到在 Linux 上使用 Qt 等框架进行应用程序编程。但很少有人使用这些东西。所以是否有特定用途在 MSVSC++ 上一次又一次地进行类型定义??例如.. 有像

这样的 typdef
typedef int BOOL;

当正常的 bool 已经可用时,这个有什么用..?我遇到过数百个其他案例,只是决定使用哪种数据类型变得如此困难。以这种方式理解预先编写的代码也变得困难。

谢谢。

最佳答案

参数中的 L 是告诉编译器以下字符串文字是 unicode 而不是单字节字符的标准方式。相当于后缀L表示长整型常量。

Windows typedef 看起来确实令人困惑,但是一旦您理解了命名方案,它们就会开始变得有意义。

您必须记住,此 API 起源于 90 年代初。因此,需要 typedef 来处理不同架构以及 32/64 位类型的指针,并且还需要为非英特尔 Windows 机器进行编译。

BOOL->int 映射是必需的,因为接口(interface)是 C 兼容的(不是 c++),因此不能使用内置的 bool 类型。

关于c++ - SHLoadImageFile(L"\\Program Files\\TrainingApp\\background.png");论点中的 L 是为了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2559357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com