当前位置: 首页 > news >正文

typedef函数代码段解释以及部分Windows下的系统函数

文章目录

  • 1、typedef int (WINAPI* LPSDOLInitialize)(const SDOLAppInfo* pAppInfo)
  • 2、typedef int (WINAPI* LPSDOLGetModule)(REFIID riid, void** intf)
  • 3、typedef int (WINAPI* LPSDOLTerminal)();
  • 4、GetProcAddress运行时获取一个动态链接库(DLL)中导出函数的地址
  • 5、LoadLibraryExA 用于加载指定ANSI的动态链接库文件
  • 6、LoadLibraryExW 用于加载指定Wide宽字符的动态链接库文件
  • 7、LoadLibraryA 用于加载指定ANSI的动态链接库文件
  • 8、LoadLibraryW 用于加载指定Wide宽字符的动态链接库文件
  • 9、LoadLibraryExA和LoadLibraryA以及LoadLibraryExW和LoadLibraryW区别

1、typedef int (WINAPI* LPSDOLInitialize)(const SDOLAppInfo* pAppInfo)

C/C++ 中,typedef 用于创建类型别名,它可以让你为一个已有的数据类型定义一个新的名称,从而使代码更加清晰、易读,也可以简化类型的声明和使用。

这段代码用typedef定义了一个函数指针类型 LPSDOLInitialize,该函数指针指向一个函数,该函数接受一个指向 SDOLAppInfo 结构体的指针作为参数,并返回一个 int 类型的值。

具体来说,typedef 是用于创建类型别名的关键字。在这里,它创建了一个名为 LPSDOLInitialize 的新类型,它被定义为一个函数指针类型,该函数指针指向具有特定参数和返回类型的函数。

WINAPI 是一个宏,用于指定函数的调用约定,它在 Windows 平台上用于标识函数调用的方式和参数传递方式。

总结一下,该代码段定义了一个函数指针类型 LPSDOLInitialize,该指针可以指向一个具有特定参数和返回类型的函数,这个函数接受一个指向 SDOLAppInfo 结构体的指针作为参数,并返回一个 int 类型的值。这种函数指针的定义通常用于在运行时动态加载库中的函数并进行调用。

用这个函数指针类型 LPSDOLInitialize就可以创建对象: LLPSDOLInitialize m_pfSDOLInitialize;

例如,假设你想要声明一个函数指针变量来保存指向这样一个函数的指针,你可以这样写:

LPSDOLInitialize pFuncPointer;

这使得代码更加简洁,而不是每次都写完整的函数指针类型。typedef 在这里的作用就是为了创建一个新的名称,使代码更具可读性。

	//函数指针对象if (m_pfSDOLInitialize(&appinfo) != SDOL_ERRORCODE_OK){return false;}

另外,typedef 还可以用于创建其他类型别名,如结构体、枚举等,以及用于更方便地处理复杂的数据类型。

2、typedef int (WINAPI* LPSDOLGetModule)(REFIID riid, void** intf)

这个 typedef 定义了另一个函数指针类型的别名 LPSDOLGetModule。这个函数指针指向一个具有以下特征的函数:

  • 返回类型为 int
  • 使用 WINAPI 调用约定。
  • 接受一个 REFIID 类型的参数 riid 和一个 void** 类型的参数 intf

3、typedef int (WINAPI* LPSDOLTerminal)();

这个 typedef 定义了第三个函数指针类型的别名 LPSDOLTerminal。这个函数指针指向一个具有以下特征的函数:

  • 返回类型为 int
  • 使用 WINAPI 调用约定。
  • 不接受任何参数。

为什么要使用 typedef 呢?使用 typedef 可以让代码更加清晰,提高可读性。通过定义这些函数指针类型的别名,可以更容易地声明和使用这些函数指针,特别是在涉及到多次使用相同函数指针类型的情况下。这有助于简化代码并提高可维护性。

4、GetProcAddress运行时获取一个动态链接库(DLL)中导出函数的地址

WINBASEAPI
FARPROC
WINAPI
GetProcAddress (__in HMODULE hModule,__in LPCSTR lpProcName);

这段代码片段是 Windows 操作系统的头文件和函数声明。让我为您解释一下这些概念:

  • WINBASEAPI: 这是一个宏,通常用于声明 Windows API 函数。它在 Windows 头文件中定义,并根据编译器和系统的不同进行设置。它的作用是为了确保在编译时使用正确的调用约定(calling convention)和导入/导出修饰符。

  • FARPROC: 这是一个函数指针类型,用于指向导入库函数。FARPROC 代表 “FAR Procedure”,在 32 位 Windows 中用于指向动态链接库(DLL)中的函数。

  • WINAPI: 这是一个宏,用于声明 Windows API 函数,同时指定函数的调用约定。WINAPI 宏的定义会根据编译器和系统的不同进行设置。通常,它会将函数调用约定设置为 __stdcall,这是一种用于 Windows API 的常见调用约定。

  • GetProcAddress: 这是 Windows API 中的一个函数,用于在运行时获取一个动态链接库(DLL)中导出函数的地址。这个函数在加载 DLL 后用于获取指定函数的指针,以便在程序中调用这些函数。

所以,这段代码片段声明了 GetProcAddress 函数,并提供了它的参数类型和说明。在实际代码中,您需要包含相关的 Windows 头文件,并根据需要使用这个函数来获取 DLL 中导出函数的指针,从而进行调用。

GetProcAddressWindows 操作系统提供的一个函数,用于在运行时获取一个动态链接库(DLL)中导出函数的地址。这个函数通常在动态链接库加载后被调用,用于获取库中特定函数的指针,以便在程序中调用这些函数。

函数签名如下:

FARPROC GetProcAddress(HMODULE hModule,    // 动态链接库的句柄LPCSTR  lpProcName   // 函数的名称或者是函数的序号
);
  • hModule: 指向已加载的动态链接库的句柄。通常使用 LoadLibrary 函数来加载动态链接库,然后将返回的句柄传递给 GetProcAddress

  • lpProcName: 要获取地址的函数的名称,或者是函数在导出表中的序号(函数的索引)。如果是名称,应该是一个以 NULL 结尾的字符串。

  • GetProcAddress 的返回值是一个函数指针,可以用于直接调用动态链接库中的函数。这对于动态加载库并在需要时使用其中的函数非常有用,特别是在插件式架构中或者需要在运行时决定调用哪些函数的情况下。

一个常见的用法是在加载插件时使用 GetProcAddress 来获取插件中的函数指针,然后通过这些指针来调用插件中的功能。

5、LoadLibraryExA 用于加载指定ANSI的动态链接库文件

WINBASEAPI
__out_opt
HMODULE
WINAPI
LoadLibraryExA(__in       LPCSTR lpLibFileName,__reserved HANDLE hFile,__in       DWORD dwFlags);

这段代码是 Windows API 函数 LoadLibraryExA 的声明。让我为您解释一下其中的参数和类型:

  • WINBASEAPI: 这是一个宏,用于声明 Windows API 函数。它在 Windows 头文件中定义,并根据编译器和系统的不同进行设置。

  • __out_opt: 这是一个标记,表示函数的返回值可以是一个可选的输出参数。在这个声明中,它表示函数的返回值 HMODULE 可能会被用作输出参数,以传递一个返回的模块句柄。

  • HMODULE: 这是一个 Windows 数据类型,表示模块(通常是 DLLEXE)的句柄。HMODULE 句柄是用于在程序中引用已加载模块的标识符。

  • WINAPI: 这是一个宏,用于声明 Windows API 函数,并指定函数的调用约定。通常情况下,它将函数调用约定设置为 __stdcall,这是一种用于 Windows API 的常见调用约定。

  • LoadLibraryExA: 这是一个 Windows API 函数,用于加载一个指定的动态链接库(DLL)文件。

  • lpLibFileName: 一个以 null 结尾的字符串,表示要加载的 DLL 文件名。LPCSTR 表示一个指向以 ANSI 字符集编码的字符串的指针。

  • hFile: 一个保留参数,传入 HANDLE 类型的文件句柄,或者传入 NULL

  • dwFlags: 一个标志,用于指定加载 DLL 的方式。可以是各种标志的组合,例如 :

    • DONT_RESOLVE_DLL_REFERENCES: 加载 DLL 但不解析其依赖项。
    • LOAD_LIBRARY_AS_DATAFILE: 将 DLL 视为数据文件而不是可执行文件。
    • LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR: 仅在 DLL 所在的目录中搜索依赖项。

综合起来,这个声明表明了一个 Windows API 函数 LoadLibraryExA,它用于加载指定的动态链接库文件。函数返回一个 HMODULE 类型的句柄,表示已加载的模块。参数类型和标记都提供了函数使用和返回值的相关信息。

6、LoadLibraryExW 用于加载指定Wide宽字符的动态链接库文件

WINBASEAPI
__out_opt
HMODULE
WINAPI
LoadLibraryExW(__in       LPCWSTR lpLibFileName,__reserved HANDLE hFile,__in       DWORD dwFlags);

这段代码是 Windows API 函数 LoadLibraryExW 的声明。让我为您解释一下其中的参数和类型:

  • WINBASEAPI: 这是一个宏,用于声明 Windows API 函数。它在 Windows 头文件中定义,并根据编译器和系统的不同进行设置。

  • __out_opt: 这是一个标记,表示函数的返回值可以是一个可选的输出参数。在这个声明中,它表示函数的返回值 HMODULE 可能会被用作输出参数,以传递一个返回的模块句柄。

  • HMODULE: 这是一个 Windows 数据类型,表示模块(通常是 DLLEXE)的句柄。HMODULE 句柄是用于在程序中引用已加载模块的标识符。

  • WINAPI: 这是一个宏,用于声明 Windows API 函数,并指定函数的调用约定。通常情况下,它将函数调用约定设置为 __stdcall,这是一种用于 Windows API 的常见调用约定。

  • LoadLibraryExW: 这是一个 Windows API 函数,用于加载一个指定的动态链接库(DLL)文件。

  • lpLibFileName: 这是一个指向以 null 结尾的字符串的指针,表示要加载的动态链接库(DLL)的文件名。LPCWSTR 表示一个指向以宽字符(Unicode)编码的字符串的指针。您需要将要加载的 DLL 的文件名以宽字符格式传递给这个参数。

  • hFile: 一个保留参数,传入 HANDLE 类型的文件句柄,或者传入 NULL

  • dwFlags: 一个标志,用于指定加载 DLL 的方式。可以是各种标志的组合,例如 :

    • DONT_RESOLVE_DLL_REFERENCES: 加载 DLL 但不解析其依赖项。
    • LOAD_LIBRARY_AS_DATAFILE: 将 DLL 视为数据文件而不是可执行文件。
    • LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR: 仅在 DLL 所在的目录中搜索依赖项。

综合起来,LoadLibraryExW 函数用于加载指定的 DLL 文件,并且通过参数来控制加载方式和行为。根据传递的文件名、文件句柄和标志,该函数将加载 DLL 并返回一个模块句柄(HMODULE),以便后续操作使用。不同之处在于该函数接受宽字符格式的文件名,适用于 Unicode 编码。

7、LoadLibraryA 用于加载指定ANSI的动态链接库文件

WINBASEAPI
__out_opt
HMODULE
WINAPI
LoadLibraryExA(__in       LPCSTR lpLibFileName,);

这段代码是 Windows API 函数 LoadLibraryA 的声明。让我为您解释一下其中的参数和类型:

  • WINBASEAPI: 这是一个宏,用于声明 Windows API 函数。它在 Windows 头文件中定义,并根据编译器和系统的不同进行设置。

  • __out_opt: 这是一个标记,表示函数的返回值可以是一个可选的输出参数。在这个声明中,它表示函数的返回值 HMODULE 可能会被用作输出参数,以传递一个返回的模块句柄。

  • HMODULE: 这是一个 Windows 数据类型,表示模块(通常是 DLLEXE)的句柄。HMODULE 句柄是用于在程序中引用已加载模块的标识符。

  • WINAPI: 这是一个宏,用于声明 Windows API 函数,并指定函数的调用约定。通常情况下,它将函数调用约定设置为 __stdcall,这是一种用于 Windows API 的常见调用约定。

  • LoadLibraryA: 这是一个 Windows API 函数,用于加载一个指定的动态链接库(DLL)文件。

  • lpLibFileName: 一个以 null 结尾的字符串,表示要加载的 DLL 文件名。LPCSTR 表示一个指向以 ANSI 字符集编码的字符串的指针。

综合起来,这个声明表明了一个 Windows API 函数 LoadLibraryA,它用于加载指定的动态链接库文件。函数返回一个 HMODULE 类型的句柄,表示已加载的模块。参数类型和标记都提供了函数使用和返回值的相关信息。总之,这个函数原型定义了 LoadLibraryA 函数的签名,它接受一个以多字节字符编码的 DLL 文件名作为参数,然后返回一个表示已加载模块的句柄。使用这个句柄,您可以执行与该模块相关的操作。

8、LoadLibraryW 用于加载指定Wide宽字符的动态链接库文件

WINBASEAPI
__out_opt
HMODULE
WINAPI
LoadLibraryExW(__in       LPCWSTR lpLibFileName,);

这段代码是 Windows API 函数 LoadLibraryW 的声明。让我为您解释一下其中的参数和类型:

  • WINBASEAPI: 这是一个宏,用于声明 Windows API 函数。它在 Windows 头文件中定义,并根据编译器和系统的不同进行设置。

  • __out_opt: 这是一个标记,表示函数的返回值可以是一个可选的输出参数。在这个声明中,它表示函数的返回值 HMODULE 可能会被用作输出参数,以传递一个返回的模块句柄。

  • HMODULE: 这是一个 Windows 数据类型,表示模块(通常是 DLLEXE)的句柄。HMODULE 句柄是用于在程序中引用已加载模块的标识符。

  • WINAPI: 这是一个宏,用于声明 Windows API 函数,并指定函数的调用约定。通常情况下,它将函数调用约定设置为 __stdcall,这是一种用于 Windows API 的常见调用约定。

  • LoadLibraryW: 这是一个 Windows API 函数,用于加载一个指定的动态链接库(DLL)文件。

  • lpLibFileName: 这是一个指向以 null 结尾的字符串的指针,表示要加载的动态链接库(DLL)的文件名。LPCWSTR 表示一个指向以宽字符(Unicode)编码的字符串的指针。您需要将要加载的 DLL 的文件名以宽字符格式传递给这个参数。

综合起来,LoadLibraryW 函数用于加载指定的 DLL 文件。根据传递的文件名、文件句柄和标志,该函数将加载 DLL 并返回一个模块句柄(HMODULE),以便后续操作使用。不同之处在于该函数接受宽字符格式的文件名,适用于 Unicode 编码。总之,这个函数原型定义了 LoadLibraryA 函数的签名,它接受一个以Unicode编码的 DLL 文件名作为参数,然后返回一个表示已加载模块的句柄。使用这个句柄,您可以执行与该模块相关的操作。

9、LoadLibraryExA和LoadLibraryA以及LoadLibraryExW和LoadLibraryW区别

这些函数是 Windows API 中用于加载动态链接库 (DLL) 的函数,主要区别在于它们支持的字符串类型和加载选项:

  • LoadLibraryExALoadLibraryA
    • LoadLibraryExA:用于以 ANSI 编码加载 DLL。它接受 ANSI 字符串作为参数。
    • LoadLibraryA:也用于以 ANSI 编码加载 DLL。与 LoadLibraryExA 类似,但没有额外的加载选项。

这两个函数的主要区别在于 LoadLibraryExA 支持额外的加载选项,如指定加载行为和加载上下文等。而 LoadLibraryA 是基本的加载函数,不提供这些选项。

  • LoadLibraryExWLoadLibraryW
    • LoadLibraryExW:用于以 Unicode 编码加载 DLL。它接受 Unicode 字符串作为参数。
    • LoadLibraryW:也用于以 Unicode 编码加载 DLL。与 LoadLibraryExW 类似,但没有额外的加载选项。

这两个函数的区别与前面所述的 ANSI 版本类似,LoadLibraryExW 支持额外的加载选项,而 LoadLibraryW 是基本的加载函数。

在选择使用哪个函数时,您需要根据字符串的编码和加载选项来决定。如果您使用的是 ANSI 字符串,可以选择 LoadLibraryExA 或 LoadLibraryA。如果您使用的是 Unicode 字符串,可以选择 LoadLibraryExWLoadLibraryW。如果您需要额外的加载选项,可以使用以 “Ex” 结尾的版本。

相关文章:

typedef函数代码段解释以及部分Windows下的系统函数

文章目录 1、typedef int (WINAPI* LPSDOLInitialize)(const SDOLAppInfo* pAppInfo)2、typedef int (WINAPI* LPSDOLGetModule)(REFIID riid, void** intf)3、typedef int (WINAPI* LPSDOLTerminal)();4、GetProcAddress运行时获取一个动态链接库(DLL)中…...

Typora常用手册

常用快捷键 加粗: Ctrl B 标题: Ctrl H 插入链接: Ctrl K 插入代码: Ctrl Shift C – 无法执行 行内代码: Ctrl Shift K 插入图片: Ctrl Shift I 无序列表:Ctrl Shift L – 无法执行…...

互联网发展历程:从网线不够长到中继器的引入

互联网,这个如今贯穿我们生活的无所不在的网络,其发展历程充满了无数的创新和变革。有一项看似不太起眼的技术却在互联网的发展中发挥着至关重要的作用,那就是中继器。本文将带您深入了解互联网的发展历程,探讨在网线不够长的情况…...

【Java】异常处理 之 使用SLF4J 和 Logback

使用SLF4J和Logback 前面介绍了Commons Logging 和Log4j 这一对好基友,它们一个负责充当日志 API,一个负责实现日志底层,搭配使用非常便于开发。 有的童鞋可能还听说过SLF4J和Logback。这两个东东看上去也像日志,它们又是啥&…...

C++11并发与多线程笔记 (1)

C11并发与多线程笔记(1) 1、并发、进程、线程的基本概念和综述1.1 并发1.2 可执行程序1.3 进程1.4 线程1.5 学习心得 2、并发的实现方法2.1 多进程并发2.2 多线程并发 3、C11新标准线程库 1、并发、进程、线程的基本概念和综述 1.1 并发 指在一个时间段…...

07_Hudi案例实战、Flink CDC 实时数据采集、Presto、FineBI 报表可视化等

7.第七章 Hudi案例实战 7.1 案例架构 7.2 业务数据 7.2.1 客户信息表 7.2.2 客户意向表 7.2.3 客户线索表 7.2.4 线索申诉表 7.2.5 客户访问咨询记录表 7.3 Flink CDC 实时数据采集 7.3.1 开启MySQL binlog 7.3.2 环境准备 7.3.3 实时采集数据 7.3.3.1 客户信息表 7.3.3.2 客户…...

ceph相关概念和部署

Ceph 可用于向云提供 Ceph 对象存储 平台和 Ceph 可用于提供 Ceph 块设备服务 到云平台。Ceph 可用于部署 Ceph 文件 系统。所有 Ceph 存储集群部署都从设置 每个 Ceph 节点,然后设置网络。 Ceph 存储集群需要满足以下条件:至少一个 Ceph 监控器&#x…...

Android Jetpack Compose 中的分页与缓存展示

Android Jetpack Compose 中的分页与缓存展示 在几乎任何类型的移动项目中,移动开发人员在某个时候都会处理分页数据。如果数据列表太大,无法一次从服务器检索完毕,这就是必需的。因此,我们的后端同事为我们提供了一个端点&#…...

无名管道 / 有名管道(FIFO)

根据上节所讲就可以了解到:管道其实就是实现进程间通讯IPC中的一种类型方法 基本概念(无名管道) 管道是一种最基本的IPC机制,通常指无名管道,也是UNIX系统IPC最古老的形式。管道只能作用于有血缘关系的进程之间&…...

Three.js纹理贴图

目录 Three.js入门 Three.js光源 Three.js阴影 Three.js纹理贴图 纹理是一种图像或图像数据,用于为物体的材质提供颜色、纹理、法线、位移等信息,从而实现更加逼真的渲染结果。 纹理可以应用于Three.js中的材质类型,如MeshBasicMaterial…...

1+X Web前端开发职业技能等级证书建设方案

一 、系统概述 1X Web前端开发技术是计算机类专业重要的核心课程,课程所包含的教学内容多,实践性强,并且相关技术更新快。传统的课堂讲授模式以教师为中心,学生被动式接收,难以调动学生学习的积极性和主动性。混合式教…...

Rx.NET in Action 第二章学习笔记

2 Hello, Rx 本章节涵盖的内容: 不使用Rx的工作方式向项目中添加Rx创建你的第一个Rx应用程序 Rx 的目标是协调和统筹来自社交网络、传感器、用户界面事件等不同来源的基于事件的异步计算。例如,建筑物周围的监控摄像头和移动传感器会在有人靠近建筑物时触发&#xf…...

【软件工程 | 模块耦合】什么是模块耦合及分类

概念 耦合(coupling)是对两个模块之间联接程度的一种度量。模块间的依赖程度越大,则其耦合程度也就越大; 反之,模块间的依赖程度越小,则其耦合程度也就越小。 很显然,为了使软件具有较好的可维护性和可修改性&#xf…...

OCT介绍和分类

前言:研究方向和OCT有关,为了方便以后回顾,所以整理了OCT相关的一些内容。 OCT介绍和分类 OCT介绍分类时域OCT频域OCT扫频OCT谱域OCT OCT介绍 名称:OCT、光学相干层析成像术、Optical Coherence Tomography。 概念:O…...

07-2_Qt 5.9 C++开发指南_二进制文件读写(stm和dat格式)

文章目录 1. 实例功能概述2. Qt预定义编码文件的读写2.1 保存为stm文件2.2 stm文件格式2.3 读取stm文件 3. 标准编码文件的读写3.1 保存为dat文件3.2 dat文件格式3.3 读取dat文件 4. 框架及源码4.1 可视化UI设计4.2 mainwindow.cpp 1. 实例功能概述 除了文本文件之外&#xff…...

SpringBoot复习:(41)配置文件中配置的server开头的属性是怎么配置到Servlet容器中起作用的?

ServletWebServerFactoryAutoConfiguration类: 可以看到其中使用了EnableConfigurationProperties导入了ServerProperties 而ServerProperties通过使用ConfigurationProperties注解导入了配置文件中已server开头的那些配置项。 可以看到ServletWebServerFactory定…...

深入解读网络协议:原理与重要概念

目录 TCP/IP协议 IP地址 子网掩码 DNS 网关 网络端口 TCP/IP协议 TCP/IP是互联网通信的基础协议。它由两个部分组成:TCP负责数据的可靠传输,确保数据按序到达目标;IP负责寻址和路由,确保数据在网络中正确传递。TCP/IP协议簇…...

O型圈不同类型的应用指南

O型圈因其优异的密封性能而广泛应用于各个行业和应用。它们简单、经济高效且密封可靠,下面我们了解一下适合每种应用的特定类型的O型圈。 1、汽车行业 在汽车行业中,O型圈在密封发动机部件和防止机油或冷却剂泄漏方面发挥着至关重要的作用。常见应用包…...

Mysql 搭建MHA高可用架构,实现自动failover,完成主从切换

目录 自动failover MHA: MHA 服务 项目:搭建Mysql主从复制、MHA高可用架构 实验项目IP地址配置: MHA下载地址 项目步骤: 一、修改主机名 二、编写一键安装mha node脚本和一键安装mha mangaer脚本,并执行安装…...

Python:列表、元组、集合、字典,数据类型之间的 5 个差异

Python:列表、元组、集合、字典,数据类型之间的 5 个差异 1. 相同点2. 不同点2.1 排序2.2 索引2.3 可变性2.5 允许的类型2.4 允许重复 源码 这篇博客将介绍列表、元组、集合、字典(lists, tuples, sets, and dictionaries)数据类型…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

GitHub 趋势日报 (2025年06月06日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...