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

C语言或C++通过IShellLinkA创建或解析lnk快捷方式(使用char字符数组)

本例程用到的COM接口有IShellLinkA和IPersistFile。
请注意因为函数参数的类型不为BSTR,所以这两个接口可直接传char *或wchar_t *字符串,不需要提前转化为BSTR类型。

C语言的写法:

/* 这个程序只能在C编译器下编译成功, 请确保源文件的扩展名为c */
#define COBJMACROS
#include <stdio.h>
#include <ShObjIdl.h>// char *字符串转wchar_t *字符串
wchar_t *gb2312_to_utf16(const char *s)
{int n;wchar_t *ws;n = MultiByteToWideChar(CP_ACP, 0, s, -1, NULL, 0);ws = calloc(n, sizeof(wchar_t));if (ws != NULL)MultiByteToWideChar(CP_ACP, 0, s, -1, ws, n);return ws;
}// 创建快捷方式
void create_shortcut(const char *name, const char *target, const char *desc)
{wchar_t *ws;IPersistFile *file;IShellLinkA *link;HRESULT hr;hr = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLinkA, &link);if (SUCCEEDED(hr)){// 以下两个函数可直接传char *字符串IShellLinkA_SetPath(link, target);IShellLinkA_SetDescription(link, desc);hr = IShellLinkA_QueryInterface(link, &IID_IPersistFile, &file);if (SUCCEEDED(hr)){ws = gb2312_to_utf16(name);hr = IPersistFile_Save(file, ws, TRUE); // 第二个参数不是BSTR类型, 而是LPCOLESTR类型, 直接传wchar_t *字符串即可// 第三个参数决定是否将此文件用作后续的工作文件free(ws);if (SUCCEEDED(hr))printf("创建快捷方式%s成功\n", name);elseprintf("创建快捷方式%s失败\n", name);IPersistFile_Release(file);}IShellLinkA_Release(link);}
}// 解析快捷方式
void read_shortcut(const char *name)
{char target[MAX_PATH]; // 在Windows系统中, 路径的最大长度是MAX_PATHchar desc[INFOTIPSIZE]; // 在Windows系统中, 快捷方式描述的最大长度是INFOTIPSIZEwchar_t *ws;IPersistFile *file;IShellLinkA *link;HRESULT hr;hr = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLinkA, &link);if (SUCCEEDED(hr)){hr = IShellLinkA_QueryInterface(link, &IID_IPersistFile, &file);if (SUCCEEDED(hr)){ws = gb2312_to_utf16(name);hr = IPersistFile_Load(file, ws, STGM_READ);free(ws);if (SUCCEEDED(hr)){printf("解析快捷方式%s成功\n", name);hr = IShellLinkA_GetPath(link, target, MAX_PATH, NULL, SLGP_RAWPATH);if (SUCCEEDED(hr))printf("链接目标: %s\n", target);hr = IShellLinkA_GetDescription(link, desc, INFOTIPSIZE);if (SUCCEEDED(hr))printf("描述: %s\n", desc);}elseprintf("解析快捷方式%s失败\n", name);IPersistFile_Release(file);}IShellLinkA_Release(link);}
}// 解析开始菜单中Office 2010的所有快捷方式
void read_office2010_links()
{char *folder = "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\Microsoft Office";char path[MAX_PATH];HANDLE find;WIN32_FIND_DATAA find_data;// 请注意: _s结尾的字符串操作函数, 凡是命名为MaxCount的参数, 都要记得减去1, 否则字符数组刚好满的时候程序会崩溃_snprintf_s(path, sizeof(path), sizeof(path) - 1, "%s\\*.lnk", folder);find = FindFirstFileA(path, &find_data);if (find != INVALID_HANDLE_VALUE){do{_snprintf_s(path, sizeof(path), sizeof(path) - 1, "%s\\%s", folder, find_data.cFileName);read_shortcut(path);} while (FindNextFileA(find, &find_data));FindClose(find);}
}int main()
{CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);create_shortcut("示例快捷方式.lnk", "C:\\WINDOWS\\system32\\shell32.dll", "Windows XP界面真好看啊!");read_shortcut("示例快捷方式.lnk");read_office2010_links();CoUninitialize();return 0;
}

C++的写法:

#include <iostream>
#include <ShObjIdl.h>using namespace std;// char *字符串转wchar_t *字符串
wchar_t *gb2312_to_utf16(const char *s)
{int n;wchar_t *ws;n = MultiByteToWideChar(CP_ACP, 0, s, -1, NULL, 0);ws = new wchar_t[n];if (ws != NULL)MultiByteToWideChar(CP_ACP, 0, s, -1, ws, n);return ws;
}// 创建快捷方式
void create_shortcut(const char *name, const char *target, const char *desc)
{wchar_t *ws;IPersistFile *file;IShellLinkA *link;HRESULT hr;hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&link));if (SUCCEEDED(hr)){// 以下两个函数可直接传char *字符串link->SetPath(target);link->SetDescription(desc);hr = link->QueryInterface(&file);if (SUCCEEDED(hr)){ws = gb2312_to_utf16(name);hr = file->Save(ws, TRUE); // 第一个参数不是BSTR类型, 而是LPCOLESTR类型, 直接传wchar_t *字符串即可// 第二个参数决定是否将此文件用作后续的工作文件delete[] ws;if (SUCCEEDED(hr))cout << "创建快捷方式" << name << "成功" << endl;elsecout << "创建快捷方式" << name << "失败" << endl;file->Release();}link->Release();}
}// 解析快捷方式
void read_shortcut(const char *name)
{char target[MAX_PATH]; // 在Windows系统中, 路径的最大长度是MAX_PATHchar desc[INFOTIPSIZE]; // 在Windows系统中, 快捷方式描述的最大长度是INFOTIPSIZEwchar_t *ws;IPersistFile *file;IShellLinkA *link;HRESULT hr;hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&link));if (SUCCEEDED(hr)){hr = link->QueryInterface(&file);if (SUCCEEDED(hr)){ws = gb2312_to_utf16(name);hr = file->Load(ws, STGM_READ);delete[] ws;if (SUCCEEDED(hr)){cout << "解析快捷方式" << name << "成功" << endl;hr = link->GetPath(target, MAX_PATH, NULL, SLGP_RAWPATH);if (SUCCEEDED(hr))cout << "链接目标: " << target << endl;hr = link->GetDescription(desc, INFOTIPSIZE);if (SUCCEEDED(hr))cout << "描述: " << desc << endl;}elsecout << "解析快捷方式" << name << "失败" << endl;file->Release();}link->Release();}
}// 解析开始菜单中Office 2010的所有快捷方式
void read_office2010_links()
{char *folder = "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\Microsoft Office";char path[MAX_PATH];HANDLE find;WIN32_FIND_DATAA find_data;// 请注意: _s结尾的字符串操作函数, 凡是命名为MaxCount的参数, 都要记得减去1, 否则字符数组刚好满的时候程序会崩溃_snprintf_s(path, sizeof(path) - 1, "%s\\*.lnk", folder);find = FindFirstFileA(path, &find_data);if (find != INVALID_HANDLE_VALUE){do{_snprintf_s(path, sizeof(path) - 1, "%s\\%s", folder, find_data.cFileName);read_shortcut(path);} while (FindNextFileA(find, &find_data));FindClose(find);}
}int main()
{CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);create_shortcut("示例快捷方式.lnk", "C:\\WINDOWS\\system32\\shell32.dll", "Windows XP界面真好看啊!");read_shortcut("示例快捷方式.lnk");read_office2010_links();CoUninitialize();return 0;
}

程序创建的lnk快捷方式:

程序运行结果:

创建快捷方式示例快捷方式.lnk成功
解析快捷方式示例快捷方式.lnk成功
链接目标: C:\WINDOWS\system32\shell32.dll
描述: Windows XP界面真好看啊!
解析快捷方式C:\Documents and Settings\All Users\「开始」菜单\程序\Microsoft Offi
ce\Microsoft Access 2010.lnk成功
链接目标: C:\WINDOWS\Installer\{90140000-0011-0000-0000-0000000FF1CE}\accicons.e
xe
描述: 使用 Microsoft Access 创建数据库和程序来跟踪与管理信息。
解析快捷方式C:\Documents and Settings\All Users\「开始」菜单\程序\Microsoft Offi
ce\Microsoft Excel 2010.lnk成功
链接目标: C:\WINDOWS\Installer\{90140000-0011-0000-0000-0000000FF1CE}\xlicons.ex
e
描述: 使用 Microsoft Excel 执行计算、分析信息以及可视化电子表格中的数据。
解析快捷方式C:\Documents and Settings\All Users\「开始」菜单\程序\Microsoft Offi
ce\Microsoft InfoPath Designer 2010.lnk成功
链接目标: C:\WINDOWS\Installer\{90140000-0011-0000-0000-0000000FF1CE}\inficon.ex
e
描述: 使用 Microsoft InfoPath 设计动态表单,以便在整个组织中收集和重用信息。
解析快捷方式C:\Documents and Settings\All Users\「开始」菜单\程序\Microsoft Offi
ce\Microsoft InfoPath Filler 2010.lnk成功
链接目标: C:\WINDOWS\Installer\{90140000-0011-0000-0000-0000000FF1CE}\inficon.ex
e
描述: 使用 Microsoft InfoPath 填写动态表单,以便在整个组织中收集和重用信息。
解析快捷方式C:\Documents and Settings\All Users\「开始」菜单\程序\Microsoft Offi
ce\Microsoft OneNote 2010.lnk成功
链接目标: C:\WINDOWS\Installer\{90140000-0011-0000-0000-0000000FF1CE}\joticon.ex
e
描述: 使用 Microsoft OneNote 搜集、组织、查找和共享您的笔记和信息。
解析快捷方式C:\Documents and Settings\All Users\「开始」菜单\程序\Microsoft Offi
ce\Microsoft Outlook 2010.lnk成功
链接目标: C:\WINDOWS\Installer\{90140000-0011-0000-0000-0000000FF1CE}\outicon.ex
e
描述: 使用 Microsoft Outlook 发送和接收电子邮件;管理日程、联系人和任务;以及记
录活动。
解析快捷方式C:\Documents and Settings\All Users\「开始」菜单\程序\Microsoft Offi
ce\Microsoft PowerPoint 2010.lnk成功
链接目标: C:\WINDOWS\Installer\{90140000-0011-0000-0000-0000000FF1CE}\pptico.exe描述: 使用 Microsoft PowerPoint 创建和编辑用于幻灯片播放、会议和网页的演示文稿。解析快捷方式C:\Documents and Settings\All Users\「开始」菜单\程序\Microsoft Offi
ce\Microsoft Project 2010.lnk成功
链接目标: C:\WINDOWS\Installer\{90140000-003B-0000-0000-0000000FF1CE}\pj11icon.e
xe
描述: 使用 Microsoft Project 计划、跟踪和管理项目,以及与工作组交流。
解析快捷方式C:\Documents and Settings\All Users\「开始」菜单\程序\Microsoft Offi
ce\Microsoft Publisher 2010.lnk成功
链接目标: C:\WINDOWS\Installer\{90140000-0011-0000-0000-0000000FF1CE}\pubs.exe
描述: 使用 Microsoft Publisher 创建新闻稿和小册子等专业品质出版物及营销素材。
解析快捷方式C:\Documents and Settings\All Users\「开始」菜单\程序\Microsoft Offi
ce\Microsoft SharePoint Workspace 2010.lnk成功
链接目标: C:\WINDOWS\Installer\{90140000-0011-0000-0000-0000000FF1CE}\grvicons.e
xe
描述: 使用 Microsoft SharePoint Workspace 将 SharePoint 网站同步到您的计算机并处
理其内容,就像始终连接到网站一样。
解析快捷方式C:\Documents and Settings\All Users\「开始」菜单\程序\Microsoft Offi
ce\Microsoft Visio 2010.lnk成功
链接目标: C:\WINDOWS\Installer\{90140000-0057-0000-0000-0000000FF1CE}\visicon.ex
e
描述: 使用 Microsoft Visio 创建、编辑和共享图表。
解析快捷方式C:\Documents and Settings\All Users\「开始」菜单\程序\Microsoft Offi
ce\Microsoft Word 2010.lnk成功
链接目标: C:\WINDOWS\Installer\{90140000-0011-0000-0000-0000000FF1CE}\wordicon.e
xe
描述: 使用 Microsoft Word 创建和编辑具有专业外观的文档,如信函、论文、报告和小册
子。
请按任意键继续. . .

相关文章:

C语言或C++通过IShellLinkA创建或解析lnk快捷方式(使用char字符数组)

本例程用到的COM接口有IShellLinkA和IPersistFile。 请注意因为函数参数的类型不为BSTR&#xff0c;所以这两个接口可直接传char *或wchar_t *字符串&#xff0c;不需要提前转化为BSTR类型。 C语言的写法&#xff1a; /* 这个程序只能在C编译器下编译成功, 请确保源文件的扩展…...

Spring源码学习-Spring流程概述(一)

Spring启动的流程 public class Test {public static void main(String[] args) {ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext("applicationContext.xml");Student bean context.getBean(Student.class);context.close();} }调用…...

Figma怎么设置中文,Figma有中文版吗?

不是很多人不想用 Figma&#xff0c;真是因为纯英文界面而头疼。这就是为什么有人会到处搜索 Figma 如何设置中文这样的问题。 然后我们直接快刀斩乱麻&#xff0c;Figma 没有中文版&#xff0c;但是我们还有其他的方法&#xff1a;例如&#xff0c; Figma 添加一个插件来解决…...

智慧文旅一机游:科技与文化的完美结合,引领智慧文旅新潮流,智慧旅游未来已来

一、科技与文化的完美结合&#xff1a;智慧文旅一机游的核心理念 智慧文旅一机游&#xff0c;是科技与文化相融合的产物&#xff0c;它不仅代表着旅游行业的创新与发展&#xff0c;更是一种文化与科技完美结合的生活方式。一机游的核心理念在于通过先进的科技手段&#xff0c;提…...

多维时序 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积长短期记忆神经网络融合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积长短期记忆神经网络融合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积长短期记忆神经网络融合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资料 效果…...

软件工程实验报告(完整)

博主介绍&#xff1a;✌全网粉丝喜爱、前后端领域优质创作者、本质互联网精神、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战✌有需要可以联系作者我哦&#xff01; &#x1f345;附上相关C语言版源码讲解&#x1f345; &#x1f44…...

Java零基础学习20:集合的练习

编写博客目的&#xff1a;本系列博客均根据B站黑马程序员系列视频学习和编写目的在于记录自己的学习点滴&#xff0c;方便后续回忆和查找相关知识点&#xff0c;不足之处恳请各位有缘的朋友指正。 一、查找id对应的集合索引 package www.itheima;import java.util.ArrayList;…...

【latex】在Overleaf的IEEE会议模板中,快速插入参考文献

【LaTeX】在Overleaf的IEEE会议模板中&#xff0c;快速插入参考文献 写在最前面第一步&#xff1a;在文献检索网站导出引用文献的bib文件第二步&#xff1a;编辑overleaf模版方法二&#xff1a;EduBirdie生成参考文献&#xff08;补充&#xff09;使用LaTeX在Overleaf的IEEE会议…...

java反射之Field用法(获取对象的字段名和属性值)

一、概述 Field是一个类,位于java.lang.reflect包下。在Java反射中Field类描述的是类的属性信息&#xff0c;功能包括&#xff1a; 获取当前对象的成员变量的类型 对成员变量重新设值 二、如何获取Field类对象 getField(String name)&#xff1a; 获取类特定的方法&#xff0c…...

Java Web(三)--CSS

介绍 为什么需要&#xff1a; 在没有 CSS 之前&#xff0c;想要修改 HTML 元素的样式需要为每个 HTML 元素单独定义样式属性&#xff0c;费心费力&#xff1b;CSS 可以让 html 元素(内容) 样式(CSS)分离&#xff0c;提高web 开发的工作效率(针对前端开发)&#xff0c;从而…...

天津大数据培训班推荐,数据分析过程的常见错误

大数据”是近年来IT行业的热词&#xff0c;目前已经广泛应用在各个行业。大数据&#xff0c;又称海量信息&#xff0c;特点是数据量大、种类多、实时性强、数据蕴藏的价值大。大数据是对大量、动态、能持续的数据&#xff0c;通过运用分析、挖掘和整理&#xff0c;实现数据信息…...

【笔记】Helm-3 主题-17 弃用的Kubernetes API

弃用的Kubernetes API Kubernetes是一个API驱动系统&#xff0c;且API会随着时间的推移而变化&#xff0c;以反映对问题理解的不断推移。这是系统及API的普遍做法。API推移的一个重要部分是良好的弃用策略和通知用户更改API是如何实现的。换句话说&#xff0c;您的API使用者需要…...

麒麟系统—— openKylin 安装 java

麒麟系统—— openKylin 安装 java JDK 一、准备工作1. 确保麒麟系统 openKylin 已经安装完毕。2. 了解 java JDK 的版本信息&#xff0c;以便下载合适的安装包。 二、安装 java JDK3. 将下载好的 java JDK 安装包解压到指定目录。4. 配置环境5. 验证安装结果 本文将分享如何在…...

HTML学习笔记——07:其他嵌入技术

除了将图像、视频和音频嵌入到网页上&#xff0c;还能让你在网页中嵌入各种内容类型的元素&#xff1a;<iframe>, <embed> 和 <object> 元素。 <iframe>用于嵌入其他网页&#xff0c;另外两个元素则允许你嵌入 PDF&#xff0c;SVG&#xff0c;甚至 Fl…...

【UE】在控件蓝图中通过时间轴控制材质参数变化

效果 步骤 1. 新建一个控件蓝图和一个材质 2. 打开材质&#xff0c;设置材质域为用户界面&#xff0c;混合模式设置为“半透明” 在材质图表中添加两个参数来控制材质的颜色和不透明度 3. 对材质创建材质实例 4. 打开控件蓝图&#xff0c;在画布面板中添加一个图像控件 将刚…...

linux C语言socket函数send

在Linux中&#xff0c;使用C语言进行网络编程时&#xff0c;send函数是用于发送数据到已连接的套接字的重要函数之一。它通常用于TCP连接&#xff0c;但也可以用于UDP&#xff08;尽管对于UDP&#xff0c;通常更推荐使用sendto&#xff0c;因为它允许你指定目标地址和端口&…...

Django(八)

1. 管理员操作 1.1 添加 from django.shortcuts import render, redirectfrom app01 import models from app01.utils.pagination import Paginationfrom django import forms from django.core.exceptions import ValidationError from app01.utils.bootstrap import BootStr…...

上海计算机学会12月月赛 丙组题解

上海计算机学会 12 月月赛 丙组题解涉及知识点&#xff1a;数学、字符串、模拟、裴蜀定理、宽度优先搜索、动态规划 比赛链接&#xff1a;https://iai.sh.cn/contest/58 第一题&#xff1a;T1数砖数 标签&#xff1a;数学题意&#xff1a;给定一种 2 2 2x 2 2 2的瓷砖&#…...

nextjs中beforePopState使用

在某些情况下&#xff0c;希望监听popstate并在路由器对其进行操作之前执行某些操作。可以使用beforePopState。 在Next.js中&#xff0c;beforePopState是一个可选的生命周期函数&#xff0c;用于在浏览器的历史记录发生更改之前执行一些操作。具体来说&#xff0c;beforePopS…...

【并发编程】活锁

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程 ⛺️稳重求进&#xff0c;晒太阳 活锁 定义&#xff1a;活锁出现在两个线程互相改变对象的结束条件&#xff0c;最后谁也无法结束 代码示例 public class TestLiveLock {stati…...

拆解 OpenHands(11)--- Runtime主要组件

本篇继续对 runtime 的解读&#xff0c;主要介绍 插件、执行系统和环境这三个组件。因为本系列借鉴的文章过多&#xff0c;可能在参考文献中有遗漏的文章&#xff0c;如果有&#xff0c;还请大家指出。0x01 三大组件本篇要介绍的几个组件如下&#xff1a;ActionExecutor&#x…...

5步让Windows 11提速51%:Win11Debloat深度净化指南

5步让Windows 11提速51%&#xff1a;Win11Debloat深度净化指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简化和改善…...

探索Pem电解槽三维仿真模型:聚焦氢气扩散

Pem电解槽三维仿真模型&#xff0c;阴极不通水&#xff0c;只考虑氢气的扩散&#xff0c;使用二次电流分布浓物质传递自由与多孔介质流&#xff0c;不使用水电解槽节点。最近在研究Pem电解槽的三维仿真模型&#xff0c;这里面有个挺有意思的设定&#xff0c;阴极不通水&#xf…...

C# .NET 周刊|2026年3月1期

国内文章.NET 11 预览版1&#xff1a;CoreCLR 在 WebAssembly 上的全面集成与性能突破https://www.cnblogs.com/shanyou/p/19629649.NET 11 Preview 1 正式发布&#xff0c;标志着 CoreCLR 运行时能原生支持 WebAssembly。这是微软在跨平台战略上的重大进展。CoreCLR 提供更优性…...

避坑指南:ThingsBoard部件开发中5个常见错误与优化方案(附跑马灯Demo代码)

ThingsBoard部件开发实战&#xff1a;5个高频踩坑点与性能优化技巧&#xff08;含跑马灯完整实现&#xff09; 最近在技术社区看到不少开发者讨论ThingsBoard部件开发中的"玄学问题"——明明按照文档操作却出现各种诡异现象。作为经历过完整产品开发周期的技术负责人…...

Git GUI里那些小箭头和蓝点到底是啥?一份给新手的保姆级图解指南

Git GUI可视化指南&#xff1a;解码提交历史中的符号与分支拓扑 第一次打开Git GUI的提交历史视图时&#xff0c;那些彩色线条、小蓝点和神秘箭头就像天书般令人困惑。作为从SVN过渡到Git的开发者&#xff0c;我曾盯着这些符号发呆半小时——直到发现它们其实是项目历史的可视化…...

HTTP自动化测试架构:基于QD框架的HAR模板规模化治理策略

HTTP自动化测试架构&#xff1a;基于QD框架的HAR模板规模化治理策略 【免费下载链接】templates 基于开源新版 QD 框架站发布的公共har模板库&#xff0c;仅供示例 项目地址: https://gitcode.com/GitHub_Trending/templa/templates 在当今云原生和微服务架构盛行的时代…...

HunyuanVideo-Foley与Java后端集成:构建高并发音效生成服务

HunyuanVideo-Foley与Java后端集成&#xff1a;构建高并发音效生成服务 1. 场景需求与技术挑战 在线教育平台面临一个共同痛点&#xff1a;海量视频课程需要配乐&#xff0c;但人工配乐成本高、效率低。一个中等规模的平台每月新增课程可能达到上万节&#xff0c;传统音乐制作…...

MPC Video Renderer深度解析:构建专业级HDR视频渲染器的完整指南

MPC Video Renderer深度解析&#xff1a;构建专业级HDR视频渲染器的完整指南 【免费下载链接】VideoRenderer RTX HDR modded into MPC-VideoRenderer. 项目地址: https://gitcode.com/gh_mirrors/vid/VideoRenderer MPC Video Renderer是一款专为现代HDR视频播放设计的…...

RAGFlow图片回答避坑指南:为什么不用Base64和阿里云OSS?

RAGFlow图片回答架构设计&#xff1a;从Base64到容器化服务器的技术演进 当RAG系统需要处理包含图片的回答时&#xff0c;技术选型直接关系到系统的性能、安全性和可维护性。本文将深入探讨几种主流方案的优劣对比&#xff0c;并解析为何容器化图片服务器成为当前最优解。 1. 图…...