【问题标题】:How to use 32bit DLL on 64bit GO project in GOARCH=386 with VSCode如何使用 VSCode 在 GOARCH=386 的 64 位 GO 项目中使用 32 位 DLL
【发布时间】:2018-08-21 18:34:09
【问题描述】:

我已经安装了带有默认包的 VSCode 和 GO 扩展。 我的项目需要加载一个 32 位的 DLL。当我使用 F5 启动项目时,我在 syscall.LoadLibrary() 上收到错误 193。

我在互联网上发现,当有人尝试在 64 位架构上加载 32 位 DLL 时,通常会发生错误。

我认为如果我使用 GOARCH=386 进行调试,我将能够加载 DLL。但是每次我尝试使用 GOARCH=386 执行时,我都会在 VSCode 上收到错误消息,指出此架构不受支持。

需要帮助。

【问题讨论】:

  • 您的 Windows 操作系统位架构是什么。是64位还是32位?
  • 64 位 Windows 10

标签: visual-studio go dll x86 64-bit


【解决方案1】:

(我假设 64 位 DLL 无法访问)

64 位进程无法将 32 位模块加载到其进程空间中,32 位进程也无法将 64 位模块加载到其进程空间中。在 32 位和 64 位模块之间进行通信的唯一方法是通过进程间通信 (IPC)。 Microsoft 建议您使用进程间 COM 以将 32 位代码与 64 位应用程序一起使用。 Here's an article explaining the process。太丑了。

如果您的结果没问题,请将您的项目构建到 X86 平台(32 位)。这样ehlapi32.dll 就兼容并解决了问题。 64 位平台仍支持您的 32 位软件,因为 32 位进程可以在 64 位 Windows 操作系统上执行。

--

  • 我熟悉 C++ 而完全不熟悉 GO。我不知道如何(或者根本不知道)该技术可以在 GO 中实现。

【讨论】:

    【解决方案2】:

    问题是因为您试图在 64 位架构上加载 32 位 dll。使用 64 位 dll 文件。以及使用 64 位 dll for golang 安装。

    如果您尝试在 64 位操作系统上从 32 位 dll 安装 delve。 github上的issues中也提到了这一点:

    https://github.com/derekparker/delve/issues/20

    如果您想在 64 位操作系统上运行 32 位 dll,VS Code 会报错。 如果你有 golang 的 32 位 dll 卸载它并再次从 64 位 dll 安装。

    【讨论】:

    • 如果 dll 没有 64 位版本。有什么事吗?
    • @OtavioMoreira 不,应该给我 dll 的链接。如果没有,你无能为力。
    • 我正在为 ibm 模拟器使用 ehlapi32.dll
    • @OtavioMoreira 不,这不会起作用。搜索 64 位,如果他们没有,则在 github 库上提出问题。我认为他们没有,因为 ibm 网站只提到了 16 位和 32 位。你应该在那里检查我一些转身。
    猜你喜欢
    • 2011-09-02
    • 2019-05-01
    • 2015-01-07
    • 1970-01-01
    • 2012-06-06
    • 2011-08-08
    • 2013-09-26
    • 2013-06-02
    • 1970-01-01
    相关资源
    最近更新 更多