【问题标题】:Using 32-bit library from 64-bit application with perl or neko通过 perl 或 neko 使用来自 64 位应用程序的 32 位库
【发布时间】:2015-06-13 13:45:54
【问题描述】:

我知道,这经常是一个问题,但我想了解更多关于这个主题的信息。

我们有应用程序,用 C# 编写,编译为 x64。它必须编译为 x64,因为这是我们客户的要求。最近,我们发现我们有旧的 delphi 代码(sighs)和非常有用的模块,我必须测试(double sighs)。出于某种愚蠢的原因,我不能用除 delphi 7 之外的任何东西来编译这个模块。所以我坚持使用这个模块的 x32 .dll 和 x64 应用程序来使用它。

我已经发现了 IPC 通信的解决方法,但我熟悉 perl 并且最近发现了 neko。据我所知,perl 用于胶水代码,neko 用于在不同语言之间共享运行时。那么也许有一些使用 perl、neko 或其他东西的解决方法?

另外,如果您能提供任何在 neko 中在两种语言之间共享运行时的示例代码,我将不胜感激。

谢谢!

【问题讨论】:

  • 如果这两个都是 Windows 环境的可执行文件,您可以尝试在旧的可执行文件周围包裹一个 COM 互操作层并将其用作进程外服务器吗?
  • 这就是IPC communications的意思,还是我错了?
  • IPC 与 COM 包装器不同。我只是在考虑 Delphi 可执行文件实现任何 COM(组件对象模型)接口和/或对象的可能性,然后可以将其包装在互操作层中并暴露给进程外的 64 位应用程序
  • 你在问什么?您需要两个进程和 IPC。别无选择。
  • @DavidW 我明白了,谢谢,我去看看。

标签: c# perl delphi shared-libraries neko


【解决方案1】:

Perl 和 Neko 都不会帮助您在 64 位进程中使用这个 32 位库。如果您尝试使用 Perl 或 Neko,您只会在两个模块之间注入更多层。

您将需要使用一种或另一种形式的 IPC。有很多方法可以做到这一点。您可以为 32 位库创建一个 32 位 C# 宿主进程,然后使用标准 .net IPC 框架之一在 32 位和 64 位 C# 进程之间进行通信。

但是,这看起来确实非常适合进程外 COM 解决方案。创建一个公开 32 位 DLL 功能的进程外 COM 服务器。从您的 64 位进程中使用该 COM 服务器,就像使用任何其他 COM 服务器一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2011-07-07
    • 2012-01-19
    相关资源
    最近更新 更多