我有一个非常有趣的问题。这听起来很容易,但我没有找到任何关于它的信息。
我只使用一种方法使用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上运行时,它的工作也很好!!!
有人知道吗?答案 0 :(得分:0)
错误代码127
为ERROR_PROC_NOT_FOUND
。
找不到指定的程序。
通常这意味着调用GetProcAddress
的某些内容失败,因为相关模块未导出指定名称的函数。
无法从您提供的代码中辨别出正在发生的情况。遗憾的是,您没有提供太多代码,也没有提供您正在使用的代码。尽管你的问题中的代码没有执行错误检查,但你提到错误代码的事实可以看出这一点。
可能是您未展示的代码正在调用GetProcAddress
并且失败。或者可能是加载器在解析您加载的库的依赖关系时会产生错误代码。
所以,我上面所说的是对你报告的行为的广泛解释。任何更具体的内容都需要使用实际代码,但只有您拥有该代码。
答案 1 :(得分:-1)
问题解决了。
我为我设了一个依赖dll,名为" Chart",所以excel 2016有" chart.dll",2013 - 不是。 解决方案是重命名 my " chart.dll"并重建两个dll。