代码之家  ›  专栏  ›  技术社区  ›  Edward

使用托管代码包装器从64位托管代码调用32位非托管代码的最佳方法

  •  14
  • Edward  · 技术社区  · 16 年前

    随着64位机器和应用程序的普及,我不得不从托管的64位进程调用本机32位代码的频率正在增加。我不想将我的应用程序标记为32位,也无法获取正在调用的代码的64位版本。

    这个comshim解决方案工作得很好,跨进程调用由COM在幕后处理,这将这种方法的开销降到最低。

    谢谢, 预计起飞时间

    2 回复  |  直到 16 年前
        1
  •  7
  •   Regent    16 年前

    我也有同样的问题,我的解决办法是使用 remoting

    • 独立于平台 CalculatorRemote.dll 图书馆
      • CalculatorNative 带有x32 P/Invoke方法的内部静态类
      • RemoteCalculator MarshalByRefObject 计算的 ;
    • 与主平台无关的C#库(例如。 Calculator.dll ,与 Calculator 远程计算器
    • 托管的x32控制台应用程序 远程计算器 计算器远程.dll 消耗 计算器.dll 通过 IpcChannel

    因此,如果主应用程序以x64模式启动,则会产生 远程计算器 远程计算器 远程计算器

    • 你不必在任何地方注册COM类;
    • 在x32模式下运行时,远程处理不会造成任何性能损失——所有方法都将在同一AppDomain中调用。
        2
  •  5
  •   Nate Zaugg    16 年前

    几乎唯一的答案就是进程外的交流。您可以创建一个32位可执行文件的.NET项目,该项目可以进行所需的所有32位调用,并通过Windows消息、WCF、命名管道、内存映射文件(4.0)等与之通信。我非常确定Paint.NET是如何从64位进程执行WIA(Windows图像采集)的。

    在PDN的情况下,它们只是将期望的文件名作为输出传递,但是更复杂的通信并不困难。这可能是一个更好的方法,取决于你在做什么。

    推荐文章