【问题标题】:loadlibrary fails with error code 127loadlibrary 失败,错误代码为 127
【发布时间】:2016-01-28 05:04:33
【问题描述】:

我有一个非常有趣的问题。这听起来很简单,但我没有找到任何关于它的信息。

我有一个 C# 解决方案,带有 excel 插件和 winforms 应用程序和库项目,只有一种方法。

带有库的项目有下一个代码:

[DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Ansi)]
public static extern IntPtr LoadLibrary(string filename);
public sealed class LibraryInfo
{
    public readonly IntPtr Handle;
    public LibraryInfo(string dllName)
    {
        Handle = LoadLibrary(dllName);
    }
}
public LibraryInfo GetLib(string name)
{
    return new LibraryInfo(name);
}

看起来很简单。 所以我从加载项和 WinForms 调用了该方法

我有一个 Dll,专为 x64 平台和 x86 平台构建。

现在魔术: 当我从加载项和 x64 配置以及 excel-2016 运行 LoadLibrary 时,LoadLibrary 返回错误代码 127 (当然是x64)。当我在 x86 或 winform(x86 和 x64)上运行它时,它可以工作。这还不是全部,当我在 Excel 2013 上运行它时,它也可以正常工作!!!

有人知道吗?

【问题讨论】:

  • 是否可以将您的代码格式化为代码。编辑窗口提供了有关如何执行此操作的帮助。这样你就可以获得不错的语法高亮和缩进。就目前而言,这里的代码很难阅读。

标签: c# excel winapi 64-bit loadlibrary


【解决方案1】:

问题解决了。

我有一个依赖 dll,称为“Chart”,所以 excel 2016 有“chart.dll”,2013 - 没有。 解决方案是重命名 my "chart.dll" 并重建两个 dll。

【讨论】:

  • 这指的是问题中缺少的许多细节。因此,如果您认为这是您问题的答案,您需要做两件事之一。编辑问题以提供所有必要的详细信息,以便我们可以推断出此答案,而不仅仅是您。或者,如果您不想这样做,请删除该问题。以目前的形式,它可能对你没有什么用处。
【解决方案2】:

错误代码127ERROR_PROC_NOT_FOUND

找不到指定的过程。

通常这意味着调用 GetProcAddress 失败,因为相关模块未导出指定名称的函数。

从您提供的代码中无法辨别发生这种情况的确切位置。不幸的是,您没有提供很多代码,也没有提供您正在使用的代码。这一点可以从您提到错误代码这一事实中看出,尽管您的问题中的代码没有执行错误检查。

可能是您未显示的代码调用GetProcAddress 并失败。或者可能是加载器在解决您加载的库的依赖关系时产生了该错误代码。

所以,我上面所说的是对您报告的行为的广泛解释。任何更具体的内容都需要实际使用的代码,但只有您拥有该代码。

【讨论】:

  • 感谢 4 的回答。但我没有调用 getprocadrr =)
  • 很明显有些东西做了,也许是装载机。我不确定你是否真的非常详细地理解了这一点。
猜你喜欢
  • 1970-01-01
  • 2010-11-06
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多