loadlibrary失败,错误代码为127

时间:2015-10-28 12:14:34

标签: c# excel winapi 64-bit loadlibrary

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

我只使用一种方法使用excel外接程序和winforms应用程序和库项目的C#解决方案。

带库的

项目有下一个代码:

[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

调用了该方法

我是为x64平台和x86平台构建的Dll。

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

有人知道吗?

2 个答案:

答案 0 :(得分:0)

错误代码127ERROR_PROC_NOT_FOUND

  

找不到指定的程序。

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

无法从您提供的代码中辨别出正在发生的情况。遗憾的是,您没有提供太多代码,也没有提供您正在使用的代码。尽管你的问题中的代码没有执行错误检查,但你提到错误代码的事实可以看出这一点。

可能是您未展示的代码正在调用GetProcAddress并且失败。或者可能是加载器在解析您加载的库的依赖关系时会产生错误代码。

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

答案 1 :(得分:-1)

问题解决了。

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