容器进程(QQExternal)

QQExternal进程是一个容器进程,主要用于加载DLL模块,提供类似Windows rundll功能但具备更多辅助特性,如进程间通信。通过解析命令行参数,容器进程加载指定的DLL并传递参数。在QQ中,这个进程可以运行web模块或插件。实现一个简单的容器进程,只需定义一个主函数,加载并调用遵循统一接口的DLL。QT工程中,可以导出`void StartFunc(QStringList param)`接口供容器启动时调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

容器进程的意义在于这个进程并没有指定的功能,他只是负责来加载其他模块(dll),相对于普通进程的优势就是,不用单独去做一个进程,在VS中我们只用关注实现逻辑就好,当需要这个功能单独运行在一个进程中的时候,我们可以方便的用容器进程去加载他,类似于Windows自带的rundll功能。但是我们的容器进程可以有更强大的辅助功能,可以提供进程间通信接口,让多进程编程更加容易。如果关注过QQ的QQExternal进程,就会发现这个进程往往有多个,而且个数不定,这个就是QQ的容器进程,他可能会运行web的模块也可能是其他插件模块。

一个简单的容器进程,非常好实现,一个main函数,解析main参数,因为对要加载的dll接口参数变成了从命令行传入。解析命令行参数的dll地址,加载该dll,再将剩余的参数传入dll的固定接口。以为我们是一个容器进程,所以对dll的调用接口有要求,可以固定为void Start(std::vector<std::string> param); 这样的,方便传入多个参数,当然这块可以根据情况设计,但是其他需要被加载的dll模块导出的接口需要遵循这同一个规则。

 下面是一个用QT工程实现的基本的容器进程模块:

#include <QApplication>
#include <QLibrary>
typedef void(*StartFunc)(QStringList param);
int main(int argc, char *argv[])
{
	// 开启高DPI支持
	QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
	QApplication a(argc, argv);
	QStringList args = QApplication::arguments();
	QString dll = args[1].toUtf8();
	QSt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值