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

标签 c# winforms wcf dllimport

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

我有一个 Native C++ 32 位 dll,我需要在其中一个应用程序模块内部使用它,但这是不可能的,并且不想使用包装器,所以我读到最简单的方法是使用自托管 WCF 服务。

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

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

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

提前致谢

最佳答案

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

  • 父进程终止时会发生什么
  • 子进程终止时会发生什么
  • 父进程何时知道子进程还活着 - 开始使用 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

关于c# - 用于 32 位 dll 访问的自托管 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16508638/

相关文章:

c# - 根据条件更改 datagridview 单元格颜色

c# - 去除左右边框

winforms - 最小化窗口上的 WINdows GUI 自动化

c# - 如何在 C# .net 中查找不包含特定使用正则表达式的字符串

C# 将图像写入 ziarchive

c# - 使用客户端证书的 WCF 传输安全

json - 如何使用 .Net/Parse.com 发送 API 推送消息? (C#)

wcf - 将对象注入(inject)自定义 WCF UserNamePassValidator - Autofac

c# - 将数据从 RichTextBox 附加到保存的文件

c# - 在调用 SaveChanges 之前从 EF 集合中获取对象