通过来自64位exe的OLE分派启动32位exe

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过来自64位exe的OLE分派启动32位exe相关的知识,希望对你有一定的参考价值。

我有一个WPF应用程序编译到ANYCPU目标平台。该应用程序需要启动32位MFC应用程序。我是通过COM Callable包装器来做到这一点的。 COM Callable包装器使用OLE DISPATCH启动exe。如果我在win32中编译COM Wrapper并在x86目标平台中启动WPF应用程序,则32位传统应用程序将成功启动。

如果我编译COM Wrapper x64位,并编译WPF x86,我的WPF应用程序崩溃创建COM Wrapper的对象。

如果我编译COM Wrapper win32和WPF平台目标ANYCPU,我的WPF应用程序再次崩溃。我该如何正确设置?

答案

您只能使用与当前可执行文件相同的平台位大小的COM。如果您以32位进程运行,则必须使用32位COM包装器。如果您以64位进程运行,则必须使用64位COM包装器。这通常意味着您需要两个单独的应用程序版本,因此您可以定位相应的包装器。

话虽这么说,如果您的唯一目标是启动应用程序(而不是与之交互),您可以使用Process.Start而不是COM包装器来启动它。

以上是关于通过来自64位exe的OLE分派启动32位exe的主要内容,如果未能解决你的问题,请参考以下文章

从 32 位 C# 到 64 位 C++ 的 PostMessage 参数

区分 cl.exe 生成的 32 位和 64 位 PE 对象文件(Visual Studio C++)

如何从 32 位进程启动 64 位进程

rundll32.exe 等效于 64 位 DLL

是否可以在不重新启动 Visual Studio 的情况下同时编译 32 位和 64 位配置?

使用 python pyinstaller 在 64 位机器上生成 32 位 exe