2

我有一个适用于 Windows 窗体应用程序的 Visual Studio 解决方案,其中一些类库是我的应用程序模块。我的应用程序在“任何 CPU”下运行,并且不能更改为“x86”,因为它使用了大量 64 位 dll 引用。

我有一个本地 C++ 32 位 dll,我需要在其中一个应用程序模块中使用它,但这是完全不可能的,也不想使用 Wrappers,所以我读过最简单的方法是使用自托管 WCF 服务。

我正在考虑的方法是创建一个控制台应用程序(32 位)项目,它将在我的解决方案中引用本机 C++ 32 位 dll,并将托管 WCF 服务,然后当用户打开应用程序模块时,我将调用Process.Start(自托管的 wcf 控制台 app.exe),以便我的 WCF 服务启动,然后从我的 Windows 窗体应用程序中我可以访问方法等。然后我将能够使用本机 32 位 dll方法。

我认为这被称为进程外应用程序。

有没有人认为有更好的方法来做到这一点?我真的不喜欢 .EXE 应用程序(主应用程序 exe 和自托管 wcf.exe),我可以将自托管 wcf 32 位项目放在我的主 app.exe 64 位项目中吗?如果可能的话,我该怎么称呼它?

提前致谢

4

1 回答 1

2

我在我的项目中做到了,我们用 _x64 或 _x86 命名项目,您可以将两个项目放在同一个解决方案中,只需更改构建设置。我们将其命名为进程隔离。
确保以下几点:

  • 当父进程死亡时会发生什么
  • 子进程死亡时会发生什么
  • 父进程何时知道子进程处于活动状态 - 开始使用 wcf ..
  • 你需要 x86 的调用是异步的吗?然后使用正确的异步模式

你可以从我的问题中得到答案:

验证子进程 WCF 服务已启动:C# .net 3.5 进程间通信验证子进程已启动正常

关闭托管进程:关闭托管进程的最佳方式

项目参考解决方法:项目参考解决方法 .net 4.5 和 .net 3.5

于 2013-05-12T19:02:20.180 回答