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

我可以将32位本机dll(而不是.Net程序集)链接到64位.Net应用程序中吗?

  •  3
  • user2434400  · 技术社区  · 12 年前

    我们有一个旧的第三方组件,它是一个32位的本地dll。在我们基于COM的应用程序中,我们通过Windows API进行链接。现在,我们正计划将我们的应用程序升级到.Net,并在64位系统上运行。我的问题是:我们还能通过Windows API将旧的32位原生dll链接到我们的64位.net应用程序中吗?如果没有,有什么关于如何让它发挥作用的想法吗?

    2 回复  |  直到 12 年前
        1
  •  5
  •   Remy Lebeau    12 年前

    32位代码不能在64位进程内部使用,句点。但是,您可以将32位DLL封装在32位进程外COM服务器中(如果该DLL已经是COM服务器,则可以使用COM DllSurrogate 代理它),则任何64位进程(.NET或其他)都可以根据需要使用该COM服务器。否则,您将不得不将.NET项目设置为32位,而不是64位。只要安装了WOW64模拟器组件,它仍将在64位计算机上运行。

        2
  •  2
  •   ColdCat Noor    12 年前

    简短回答链接是不可能的,因为您无法将32位和64位链接在一起

    通信是的,但您需要两个可执行文件,一个32位,一个64位
    然后,您需要搜索进程间通信。

    如果你使用消息通信,你唯一可以发送32位(64位)的是 WM_COPYDATA 它可能会被 UIPI 因此您可能需要使用 ChangeWindowMessageFilter 让它通过。

    它可以工作,但您需要封装您想要在32和64系统之间进行的每一次调用。