【发布时间】:2022-01-18 13:40:29
【问题描述】:
我想在 64 位应用程序中同时加载 32 位和 64 位 DLL。这是不可能直接做到的,所以我需要为 32 位和 64 位创建一个“加载器”进程。这 2 个加载器进程将从 DLL 中收集一些数据,这些数据大多是小字符串,并立即卸载它们。然后,主 64 位应用程序(GUI)将根据位置将 DLL 的路径传递给 32 位或 64 位加载器,并重复此过程。我对IPC不太了解,应该使用什么机制?我没有任何实时或性能要求。我打算使用 Qt,所以我可能会使用它的一种 IPC 机制。
也许加载器可以像普通控制台应用程序一样直接从stdout 返回所需的数据并接受命令行参数。这可能是最简单的方法,但可能会太慢,因为加载器进程会被多次生成和删除。
【问题讨论】:
-
见
WM_COPYDATA"...一个应用程序发送WM_COPYDATA消息将数据传递给另一个应用程序..." docs.microsoft.com/en-us/windows/win32/dataxchg/wm-copydata .共享内存不适用于您的用例。下一个最简单的是 UDP。 -
@RichardCritten 加载器进程没有 GUI,似乎 WM_COPYDATA 仅适用于 2 个 GUI 应用程序。
-
Windows 不需要可见。
-
我会从
QProcess开始,或者它的readAllStandardOutput()(如果输出的字符串数量很少)或者它的readyRead()信号挂接到调用readLine()的插槽(如果您期望有足够的输出,以至于您不想等到子进程退出后再读取任何输出)。如果证明不满意,您可以开始四处寻找更有效的替代方案。 -
命名管道是我试过的,不幸的是它不能正常工作,有时它会返回垃圾数据,有时它会随机卡住。我将把这个项目放在一边