【问题标题】:How do I call a 32 bit C DLL from C# running on Windows Server 2003 64 bit edition?如何从在 Windows Server 2003 64 位版本上运行的 C# 调用 32 位 C DLL?
【发布时间】:2009-11-23 16:52:36
【问题描述】:

我知道我无法使用默认的“平台目标:任何 CPU”构建设置编译我的 C# 代码并调用 32 位 C DLL。但是如果我将此设置更改为“平台目标:x86”,C# 代码应该在 32 位上下文下运行并在该 32 位上下文下调用 C DLL,对吗?虽然它似乎不起作用。

我是否必须使用一些特殊的注册表或其他东西来注册 32 位 C DLL?

我使用的是 Windows Server 2003 64 位。

错误是:

Runtime Error!
[Path to dll]
R6034
An application has made an attempt to load the C runtime library incorrectly.

【问题讨论】:

  • 将平台目标设置为 x86 应该就足够了。您收到什么错误消息?
  • 错误是:运行时错误! [dll 路径] R6034 应用程序试图错误地加载 C 运行时库。

标签: c# 64-bit windows-server-2003


【解决方案1】:

你是对的。如果您使用设置为 x86 的平台进行构建,那么您的 32 位 DLL 应该可以正常工作。

如果不是,请检查以下几点:

  1. 确保 DLL 是可发现的。这通常意味着将其包含在与您的应用程序的 EXE 相同的文件夹中。
  2. 确保您的 DLL 所需的所有依赖项在系统上都存在(并且可以发现)。这通常意味着安装正确的 VC++ 可再发行组件。
  3. 如果您使用的是 32 位 COM 组件,请确保在系统上注册该组件。

编辑:看到您的评论后,您的问题是由于DLL not having a proper manifest。如果你embed a manifest in the DLL,它应该能够正确解析正确的 C 运行时,并加载它(前提是部署机器上安装了正确的运行时。)

【讨论】:

  • C dll 来自第 3 方,我没有来源。是否可以在没有源代码的情况下添加清单?谢谢
  • 是的,使用 mt.exe。否则,只需确保适当的运行时是本地的,它通常仍然可以工作。
猜你喜欢
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 2013-06-08
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 2013-06-22
相关资源
最近更新 更多