用于32位dll访问的自托管WCF服务

时间:2013-05-12 14:56:32

标签: c# winforms wcf dllimport

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

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

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

我认为这被称为Out-of Process应用程序。

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

提前致谢

1 个答案:

答案 0 :(得分:2)

我在我的项目中做到了,我们用_x64或_x86命名了项目,你可以让两个项目在同一个解决方案中改变构建设置。我们将它命名为过程隔离 确保以下内容:

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

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

验证子进程WCF服务已启动:C# .net 3.5 inter process communication verify the child process has started ok

关闭托管流程:best way to close hosted process

项目参考解决方案:Project reference work-around .net 4.5 and .net 3.5